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选择安装

EOS开发1-开发环境配置
文章图片
1.png 安装完成的提示信息:

EOS开发1-开发环境配置
文章图片
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 }

    推荐阅读