再战EOS合约

作为master你了不起啊

你改任你改,我重头再来!

因为master合约命令行参数又修改过了,再来一遍把!

2018.4.2日更新, 对照github文档   Tutorial.MD

环境配置略过了,执行eos目录下的eosio_build.sh 它会自行配置环境,mongodb的坑,这里就不填了。

./eosio_build.sh

成功后会出现

[100%] Built target nodeos
	 _______  _______  _______ _________ _______
	(  ____ \(  ___  )(  ____ \\__   __/(  ___  )
	| (    \/| (   ) || (    \/   ) (   | (   ) |
	| (__    | |   | || (_____    | |   | |   | |
	|  __)   | |   | |(_____  )   | |   | |   | |
	| (      | |   | |      ) |   | |   | |   | |
	| (____/\| (___) |/\____) |___) (___| (___) |
	(_______/(_______)\_______)\_______/(_______)

	EOS.IO has been successfully built. 0:4:35

	To verify your installation run the following commands:

	/home/feng/opt/mongodb/bin/mongod -f /home/feng/opt/mongodb/mongod.conf &
	cd /home/feng/eos/build; make test

	For more information:
	EOS.IO website: https://eos.io
	EOS.IO Telegram channel @ https://t.me/EOSProject
	EOS.IO resources: https://eos.io/resources/
	EOS.IO wiki: https://github.com/EOSIO/eos/wiki

到nodes目录

cd build/programs/nodeos/
mkdir data-dir config-dir
cp ../../genesis.json config-dir/
cp ../../../../config.ini config-dir/

这里不在详细介绍了,各位可以去看上一篇的介绍 

再贴一下config.ini

# Track only transactions whose scopes involve the listed accounts. Default is to track all transactions. (eosio::account_history_plugin)
# filter_on_accounts = 

# Limits the maximum time (in milliseconds) processing a single get_transactions call. (eosio::account_history_plugin)
get-transactions-time-limit = 3

# File to read Genesis State from (eosio::chain_plugin)
genesis-json = "genesis.json"

# override the initial timestamp in the Genesis State file (eosio::chain_plugin)
# genesis-timestamp = 

# the location of the block log (absolute path or relative to application data dir) (eosio::chain_plugin)
block-log-dir = "blocks"

# Pairs of [BLOCK_NUM,BLOCK_ID] that should be enforced as checkpoints. (eosio::chain_plugin)
# checkpoint = 

# Limits the maximum time (in milliseconds) that a reversible block is allowed to run before being considered invalid (eosio::chain_plugin)
max-reversible-block-time = -1

# Limits the maximum time (in milliseconds) that is allowed a pushed transaction's code to execute before being considered invalid (eosio::chain_plugin)
max-pending-transaction-time = -1

# Time to wait, in milliseconds, between creating next faucet created account. (eosio::faucet_testnet_plugin)
faucet-create-interval-ms = 1000

# Name to use as creator for faucet created accounts. (eosio::faucet_testnet_plugin)
faucet-name = faucet

# [public key, WIF private key] for signing for faucet creator account (eosio::faucet_testnet_plugin)
faucet-private-key = ["EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV","5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"]

# The local IP and port to listen for incoming http connections. (eosio::http_plugin)
http-server-address = 127.0.0.1:8888

# Specify the Access-Control-Allow-Origin to be returned on each request. (eosio::http_plugin)
# access-control-allow-origin = 

# Specify the Access-Control-Allow-Headers to be returned on each request. (eosio::http_plugin)
# access-control-allow-headers = 

# Specify if Access-Control-Allow-Credentials: true should be returned on each request. (eosio::http_plugin)
access-control-allow-credentials = false

# The actual host:port used to listen for incoming p2p connections. (eosio::net_plugin)
p2p-listen-endpoint = 0.0.0.0:9876

# An externally accessible host:port for identifying this node. Defaults to p2p-listen-endpoint. (eosio::net_plugin)
# p2p-server-address = 

# The public endpoint of a peer node to connect to. Use multiple p2p-peer-address options as needed to compose a network. (eosio::net_plugin)
# p2p-peer-address = 

# The name supplied to identify this node amongst the peers. (eosio::net_plugin)
agent-name = "EOS Test Agent"

# Can be 'any' or 'producers' or 'specified' or 'none'. If 'specified', peer-key must be specified at least once. If only 'producers', peer-key is not required. 'producers' and 'specified' may be combined. (eosio::net_plugin)
allowed-connection = any

# Optional public key of peer allowed to connect.  May be used multiple times. (eosio::net_plugin)
# peer-key = 

# Tuple of [PublicKey, WIF private key] (may specify multiple times) (eosio::net_plugin)
# peer-private-key = 

# Log level: one of 'all', 'debug', 'info', 'warn', 'error', or 'off' (eosio::net_plugin)
log-level-net-plugin = info

# Maximum number of clients from which connections are accepted, use 0 for no limit (eosio::net_plugin)
max-clients = 25

# number of seconds to wait before cleaning up dead connections (eosio::net_plugin)
connection-cleanup-period = 30

# True to require exact match of peer network version. (eosio::net_plugin)
network-version-match = 0

# number of blocks to retrieve in a chunk from any individual peer during synchronization (eosio::net_plugin)
sync-fetch-span = 100

# Enable block production, even if the chain is stale. (eosio::producer_plugin)
enable-stale-production = true

# Percent of producers (0-99) that must be participating in order to produce blocks (eosio::producer_plugin)
#required-participation = false

# ID of producer controlled by this node (e.g. inita; may specify multiple times) (eosio::producer_plugin)
producer-name = eosio

# Tuple of [public key, WIF private key] (may specify multiple times) (eosio::producer_plugin)
private-key = ["EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV","5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"]

# Plugin(s) to enable, may be specified multiple times
# Load the block producer plugin, so you can produce blocks
plugin = eosio::producer_plugin  
# Wallet plugin
plugin = eosio::wallet_api_plugin  
# As well as API and HTTP plugins
plugin = eosio::chain_api_plugin  
plugin = eosio::http_plugin  

运行nodes,文档新加了一些插件参数

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

新的命令行

cd ../cleos/

创建钱包,这个私钥要保存好,以后不会在出现,每次打开钱包需要。关闭客户端后,要重新打开钱包。

feng@feng-B250-HD3P:~/workSpace/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.
"PW5Jih9U9oFCXLH62yjhCjY1iBRxfzeN6Fka1pMqYwuXMjQgxmjQq"

解锁钱包

feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos wallet unlock --password PW5Jih9U9oFCXLH62yjhCjY1iBRxfzeN6Fka1pMqYwuXMjQgxmjQq
Unlocked: default

导入测试账号的私钥,这个私钥是eosio账号测试合约用的

./cleos wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

重点来了,这里一定要在cleos目录去执行,不要使用cloes。

feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos set contract eosio ../../contracts/eosio.bios -p eosio
Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: ecc149bfbd77f5fc87791a1b86a6310a4daf169434084fcc3bb289a4cd6c94d1  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...
feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos create key
Private key: 5Jo5M9MxS7XzWRcwjdy1QVrMWXiTe4mouRx9waJLjUA8wd1LrJX
Public key: EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK
feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos wallet import 5Jo5M9MxS7XzWRcwjdy1QVrMWXiTe4mouRx9waJLjUA8wd1LrJX
imported private key for: EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK

现在我们来测试一下--plugin eosio::account_history_api_plugin  插件是否正常

根据公钥创建两个账号,然后根据公钥显示账号。

feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos create account eosio user EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK
executed transaction: ba059a60a5dfd30372f9ccf345b83954e40ea8a31221b4903570f1c2eae042ef  364 bytes  1000 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"user","owner":{"threshold":1,"keys":[{"key":"EOS5a7fk4RAQ2fzdWy5TTRdhmcHp...
feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos get accounts EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK
{
  "account_names": [
    "user"
  ]
}
feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos create account eosio tester EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK
executed transaction: b9b6f6619993a342dd6dfc2819d7b649ef95e386223b5ea19aa74a80592d1f26  364 bytes  1000 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"tester","owner":{"threshold":1,"keys":[{"key":"EOS5a7fk4RAQ2fzdWy5TTRdhmc...
feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos get accounts EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK{
  "account_names": [
    "tester",
    "user"
  ]
}

下面测试一下token合约,首先要创建一个token账号(方便后面拷贝代码)

feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos create account eosio eosio.token EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK
executed transaction: f5aa4e46d4e82187ea8f892aea9a0a170c1fb3433541e40ffe5e3cefda552710  364 bytes  1000 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"eosio.token","owner":{"threshold":1,"keys":[{"key":"EOS5a7fk4RAQ2fzdWy5TT...

部署合约

feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos set contract eosio.token ../../contracts/eosio.token -p eosio.token
Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: 79b956d0c8e0a55a7e1e54a092c078dd84fb1267c0ed2630cce3f41b3fd03477  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"...


创建货币,这里最近有简写了,上一个简写的

feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos push action eosio.token create '[ "eosio", "1000000000.0000 EOS", 0, 0, 0]' -p eosio.token
executed transaction: beab32c6347582d363ce53bebfd973fafd3c7c971741f41499a049b6b599c501  260 bytes  1000 cycles
#   eosio.token <= eosio.token::create          {"issuer":"eosio","maximum_supply":"1000000000.0000 EOS","can_freeze":0,"can_recall":0,"can_whitelis...

下面是全的

$ ./cleos push action eosio.token create '{"issuer":"eosio", "maximum_supply":"1000000000.0000 EOS", "can_freeze":0, "can_recall":0, "can_whitelist":0}' -p eosio.token
executed transaction: 0e49a421f6e75f4c5e09dd738a02d3f51bd18a0cf31894f68d335cd70d9c0e12  260 bytes  1000 cycles
#   eosio.token <= eosio.token::create          {"issuer":"eosio","maximum_supply":"1000000000.0000 EOS","can_freeze":0,"can_recall":0,"can_whitelis...

发行货币到账号上

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

我们加上-d -j 再试一次,看下transaction 的json

feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$  ./cleos push action eosio.token issue '[ "user", "100.0000 EOS", "memo" ]' -p eosio -d -j{
  "expiration": "2018-04-02T08:12:50",
  "region": 0,
  "ref_block_num": 2718,
  "ref_block_prefix": 2053470162,
  "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": "00000000007015d640420f000000000004454f5300000000046d656d6f"
    }
  ],
  "signatures": [
    "EOSJvRYs9TqrTNRx1B5RfLjiyUT8Hcsrt2krDDvocgUKbsMVStEP3dzzCEQmGQjDwMpfRcKDjLbb7GJSA8ksCvnMDzdUz2AE1"
  ],
  "context_free_data": []

转账

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

修改合约,注意这里创建的所有账号的key,均来自create ./cleos create key

feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos create account eosio ex EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQxwyoLqvczQHhpcGSjoFdSkK
executed transaction: 53d9e24496a4f031bea80a605d3ab1a86ba201f7f3cc2ab6dc56da20bb2f59c9  364 bytes  1000 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"ex","owner":{"threshold":1,"keys":[{"key":"EOS5a7fk4RAQ2fzdWy5TTRdhmcHpZQ...
feng@feng-B250-HD3P:~/workSpace/eos/build/programs/cleos$ ./cleos set contract ex ../../contracts/exchange -p ex
Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: dd5b6cbb29400006157df7e0af8eec026a3ddd0ea71a3aea018a5a5f868a0be8  35180 bytes  10000 cycles
#         eosio <= eosio::setcode               {"account":"ex","vmtype":0,"vmversion":0,"code":"0061736d0100000001f0023460067f7e7f7f7f7f0060037f7e7...
#         eosio <= eosio::setabi                {"account":"ex","abi":{"types":[{"new_type_name":"account_name","type":"name"}],"structs":[{"name":"...

EOS区块链qq群,欢迎大家多多技术交流:695283188



你可能感兴趣的:(eos)