EOS开发1-开发环境配置
资料
最权威的学习资料来自https://github.com/EOSIO/eos
其他资料黎跃春区块链博客
1 硬件软件环境
当前使用Mac OS High Sierra
EOS版本使用最新的
2 编译设置开发环境
2.1 下载EOS源码
git clone https://github.com/eosio/eos --recursive
PS:一定要加上recursive 加载所有子模块
2.2 编译源码生成可执行文件 【EOS开发1-开发环境配置】进入刚下载的目录,输入执行指令:
./eosio_build.sh
中途如有以下提示,输入1选择安装
文章图片
1.png 安装完成的提示信息:
文章图片
success.png EOS的可执行程序/eos/build/programs这个路径下面
PS:下载时间有点久,对网络要求比较高
2.3 建立区块链节点 切换到目录eos/build/programs/nodeos下面,然后执行如下命令。
./nodeos命令可附带 --data-dir 节点文件夹名字 参数,默认文件夹为nodeos。
./nodeos
修改config.ini文件,路径:
/Users/username/Library/Application Support/eosio/nodeos/config
我的文件内容如下:
做了以下配置:
enable-stale-production = true
producer-name = eosio
plugin = eosio::producer_plugin
plugin = eosio::wallet_api_plugin
plugin = eosio::chain_api_plugin
plugin = eosio::http_plugin
# the endpoint upon which to listen for incoming connections (eosio::bnet_plugin)
bnet-endpoint = 0.0.0.0:4321# the number of threads to use to process network messages (eosio::bnet_plugin)
# bnet-threads =# remote endpoint of other node to connect to;
Use multiple bnet-connect options as needed to compose a network (eosio::bnet_plugin)
# bnet-connect =# this peer will request no pending transactions from other nodes (eosio::bnet_plugin)
bnet-no-trx = false# the location of the blocks directory (absolute path or relative to application data dir) (eosio::chain_plugin)
blocks-dir = "blocks"# Pairs of [BLOCK_NUM,BLOCK_ID] that should be enforced as checkpoints. (eosio::chain_plugin)
# checkpoint =# Override default WASM runtime (eosio::chain_plugin)
# wasm-runtime =# Maximum size (in MB) of the chain state database (eosio::chain_plugin)
chain-state-db-size-mb = 1024# Maximum size (in MB) of the reversible blocks database (eosio::chain_plugin)
reversible-blocks-db-size-mb = 340# print contract's output to console (eosio::chain_plugin)
contracts-console = false# Account added to actor whitelist (may specify multiple times) (eosio::chain_plugin)
# actor-whitelist =# Account added to actor blacklist (may specify multiple times) (eosio::chain_plugin)
# actor-blacklist =# Contract account added to contract whitelist (may specify multiple times) (eosio::chain_plugin)
# contract-whitelist =# Contract account added to contract blacklist (may specify multiple times) (eosio::chain_plugin)
# contract-blacklist =# Track actions which match receiver:action:actor. Actor may be blank to include all. Receiver and Action may not be blank. (eosio::history_plugin)
# filter-on =# PEM encoded trusted root certificate (or path to file containing one) used to validate any TLS connections made.(may specify multiple times)
#(eosio::http_client_plugin)
# https-client-root-cert =# true: validate that the peer certificates are valid and trusted, false: ignore cert errors (eosio::http_client_plugin)
https-client-validate-peers = 1# The local IP and port to listen for incoming http connections;
set blank to disable. (eosio::http_plugin)
http-server-address = 127.0.0.1:8888# The local IP and port to listen for incoming https connections;
leave blank to disable. (eosio::http_plugin)
# https-server-address =# Filename with the certificate chain to present on https connections. PEM format. Required for https. (eosio::http_plugin)
# https-certificate-chain-file =# Filename with https private key in PEM format. Required for https (eosio::http_plugin)
# https-private-key-file =# 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 the Access-Control-Max-Age to be returned on each request. (eosio::http_plugin)
# access-control-max-age =# 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 =# Maximum number of client0nodes from any single IP address (eosio::net_plugin)
p2p-max-nodes-per-host = 1# 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 =# 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# maximum sizes of transaction or block messages that are sent without first sending a notice (eosio::net_plugin)
max-implicit-request = 1500# Enable block production, even if the chain is stale. (eosio::producer_plugin)
enable-stale-production = True# Start this node in a state where production is paused (eosio::producer_plugin)
pause-on-startup = false# Limits the maximum time (in milliseconds) that is allowed a pushed transaction's code to execute before being considered invalid (eosio::producer_plugin)
max-transaction-time = 30# Limits the maximum age (in seconds) of the DPOS Irreversible Block for a chain this node will produce blocks on (use negative value to indicate unlimited) (eosio::producer_plugin)
max-irreversible-block-age = -1# ID of producer controlled by this node (e.g. inita;
may specify multiple times) (eosio::producer_plugin)
producer-name = eosio# (DEPRECATED - Use signature-provider instead) Tuple of [public key, WIF private key] (may specify multiple times) (eosio::producer_plugin)
# private-key =# Key=Value pairs in the form =# Where:
#is a string form of a vaild EOSIO public key
#
#is a string in the form :
#
#is KEY, or KEOSD
#
#KEY:is a string form of a valid EOSIO private key which maps to the provided public key
#
#KEOSD:is the URL where keosd is available and the approptiate wallet(s) are unlocked (eosio::producer_plugin)
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3# Limits the maximum time (in milliseconds) that is allowd for sending blocks to a keosd provider for signing (eosio::producer_plugin)
keosd-provider-timeout = 5# Lag in number of blocks from the head block when selecting the reference block for transactions (-1 means Last Irreversible Block) (eosio::txn_test_gen_plugin)
txn-reference-block-lag = 0# The path of the wallet files (absolute path or relative to application data dir) (eosio::wallet_plugin)
wallet-dir = "."# Timeout for unlocked wallet in seconds (default 900 (15 minutes)). Wallets will automatically lock after specified number of seconds of inactivity. Activity is defined as any wallet command e.g. list-wallets. (eosio::wallet_plugin)
unlock-timeout = 900# eosio key that will be imported automatically when a wallet is created. (eosio::wallet_plugin)
# eosio-key =# Plugin(s) to enable, may be specified multiple times
# plugin =
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
接下来再次启动./nodeos程序,每0.5秒会产生一个区块:
3281458ms thread-0chain_plugin.cpp:200plugin_initialize] initializing chain plugin
3281467ms thread-0block_log.cpp:123open] Log is nonempty
3281469ms thread-0block_log.cpp:136open] my->head->block_num(): 573
3281469ms thread-0block_log.cpp:142open] Index is nonempty
3281498ms thread-0wallet_plugin.cpp:41plugin_initialize] initializing wallet plugin
3281499ms thread-0http_plugin.cpp:285plugin_initialize] configured http to listen on 127.0.0.1:8888
3281499ms thread-0net_plugin.cpp:2815plugin_initialize] Initialize net plugin
3281499ms thread-0net_plugin.cpp:2836plugin_initialize] host: 0.0.0.0 port: 9876
3281499ms thread-0net_plugin.cpp:2908plugin_initialize] my node_id is 3a795f4832207b1556e5d0b107e1b09920a4e03f772d083248bb72ecd9d66fa7
3281500ms thread-0main.cpp:104main] nodeos version 0961a560
3281500ms thread-0main.cpp:105main] eosio root is /Users/wsilverky/Library/Application Support
3281502ms thread-0chain_plugin.cpp:409plugin_startup] starting chain in read/write mode
3281502ms thread-0chain_plugin.cpp:414plugin_startup] Blockchain started;
head block is #574, genesis timestamp is 2018-06-01T12:00:00.000
3281503ms thread-0producer_plugin.cpp:577plugin_startup] producer plugin:plugin_startup() begin
3281503ms thread-0producer_plugin.cpp:592plugin_startup] Launching block production for 1 producers at 2018-06-04T08:54:41.503.
3281515ms thread-0producer_plugin.cpp:604plugin_startup] producer plugin:plugin_startup() end
3281515ms thread-0http_plugin.cpp:323plugin_startup] start listening for http requests
3281517ms thread-0wallet_api_plugin.cpp:68plugin_startup] starting wallet_api_plugin
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/create
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/create_key
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/get_public_keys
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/import_key
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/list_keys
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/list_wallets
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/lock
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/lock_all
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/open
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/set_timeout
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/sign_digest
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/sign_transaction
3281517ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/wallet/unlock
3281517ms thread-0chain_api_plugin.cpp:75plugin_startup] starting chain_api_plugin
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/abi_bin_to_json
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/abi_json_to_bin
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/get_account
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/get_block
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/get_code
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/get_currency_balance
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/get_currency_stats
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/get_info
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/get_producers
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/get_required_keys
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/get_table_rows
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/push_block
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/push_transaction
3281518ms thread-0http_plugin.cpp:369add_handler] add api url: /v1/chain/push_transactions
3281518ms thread-0net_plugin.cpp:2920plugin_startup] starting listener, max clients is 25
3282001ms thread-0producer_plugin.cpp:1073produce_block] Produced block 0000023f9dbbc675... #575 @ 2018-06-04T08:54:42.000 signed by eosio [trxs: 0, lib: 574, confirmed: 0]
3282504ms thread-0producer_plugin.cpp:1073produce_block] Produced block 00000240e1d3f6e4... #576 @ 2018-06-04T08:54:42.500 signed by eosio [trxs: 0, lib: 575, confirmed: 0]
3283003ms thread-0producer_plugin.cpp:1073produce_block] Produced block 00000241a6b05d7b... #577 @ 2018-06-04T08:54:43.000 signed by eosio [trxs: 0, lib: 576, confirmed: 0]
3283501ms thread-0producer_plugin.cpp:1073produce_block] Produced block 0000024235949459... #578 @ 2018-06-04T08:54:43.500 signed by eosio [trxs: 0, lib: 577, confirmed: 0]
3284002ms thread-0producer_plugin.cpp:1073produce_block] Produced block 00000243c78cdf99... #579 @ 2018-06-04T08:54:44.000 signed by eosio [trxs: 0, lib: 578, confirmed: 0]
3284504ms thread-0producer_plugin.cpp:1073produce_block] Produced block 0000024452fc85e6... #580 @ 2018-06-04T08:54:44.500 signed by eosio [trxs: 0, lib: 579, confirmed: 0]
3285003ms thread-0producer_plugin.cpp:1073produce_block] Produced block 000002450a94fc1a... #581 @ 2018-06-04T08:54:45.000 signed by eosio [trxs: 0, lib: 580, confirmed: 0]
3285501ms thread-0producer_plugin.cpp:1073produce_block] Produced block 00000246f564bac6... #582 @ 2018-06-04T08:54:45.500 signed by eosio [trxs: 0, lib: 581, confirmed: 0]
3286003ms thread-0producer_plugin.cpp:1073produce_block] Produced block 00000247fe1aed81... #583 @ 2018-06-04T08:54:46.000 signed by eosio [trxs: 0, lib: 582, confirmed: 0]
3286505ms thread-0producer_plugin.cpp:1073produce_block] Produced block 000002489c0b9de8... #584 @ 2018-06-04T08:54:46.500 signed by eosio [trxs: 0, lib: 583, confirmed: 0]
3287002ms thread-0producer_plugin.cpp:1073produce_block] Produced block 0000024966bb0805... #585 @ 2018-06-04T08:54:47.000 signed by eosio [trxs: 0, lib: 584, confirmed: 0]
3287504ms thread-0producer_plugin.cpp:1073produce_block] Produced block 0000024af551e428... #586 @ 2018-06-04T08:54:47.500 signed by eosio [trxs: 0, lib: 585, confirmed: 0]
3 获取区块信息 重新打开个终端,切换到cleos文件夹:
/Users/username/Documents/gitTools/eos/eos/build/programs/cleos
输入以下命令:
wsilverkydeMacBook-Pro:cleos wsilverky$ ./cleos get info
{
"server_version": "0961a560",
"chain_id": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
"head_block_num": 907,
"last_irreversible_block_num": 906,
"last_irreversible_block_id": "0000038a857f5b3dc2b0343d1b55b18c7d23abea6935c2303e17d8ed6ed65770",
"head_block_id": "0000038b14ec25e9b9dcc2f3eb0e4d1b4d6b40533c44400d29e1e80d13655a9a",
"head_block_time": "2018-06-04T08:57:28",
"head_block_producer": "eosio",
"virtual_block_cpu_limit": 494365,
"virtual_block_net_limit": 2595046,
"block_cpu_limit": 199900,
"block_net_limit": 1048576
}
wsilverkydeMacBook-Pro:cleos wsilverky$ ./cleos get info
{
"server_version": "0961a560",
"chain_id": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
"head_block_num": 913,
"last_irreversible_block_num": 912,
"last_irreversible_block_id": "000003905da80c4f7ceaa1ed95e9284a6a4257a8c0cdcd01c51ee6859fef5df3",
"head_block_id": "00000391cd7fda726dce92d506f1c06abd328c13fb17b25c1cacb75da9e8b9e6",
"head_block_time": "2018-06-04T08:57:31",
"head_block_producer": "eosio",
"virtual_block_cpu_limit": 497338,
"virtual_block_net_limit": 2610668,
"block_cpu_limit": 199900,
"block_net_limit": 1048576
}
推荐阅读
- 深入理解Go之generate
- 人生感悟记#环境仪器宋庆国成长记#072
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 六步搭建ES6语法环境
- 我的软件测试开发工程师书单
- echart|echart 双轴图开发
- NPDP拆书(三)(新产品开发战略(经营与创新战略))
- 芯灵思SinlinxA33开发板Linux内核定时器编程
- iOS,打Framework静态库
- 常用git命令总结