Speaker: Li Yuechun | Founder of Confucius Institute
Course consultation, add Lily WeChat (kongyixueyuan) consultation
At present, any EOS
information about learning related technologies comes from https://github.com/EOSIO/eos . Maybe you EOS
will be very confused in the process of setting up the development environment, the online information is very messy, and you can't make up your own mind. , I do not know how to start. Here, Brother Chun will unveil the layers for you step by step.
1. Hardware and software environment
Because there EOS
are too many versions, you need to know how to view EOS
the relevant information of the corresponding version first.
Open the EOS Github
official website https://github.com/EOSIO/eos , as shown in the figure below, click master
, then click tag
, you will see different versions and their corresponding documents.
I have installed various versions on my computer and stepped on various inexplicable pits. In this article, I will share with you the following configuration.
- operating system
EOS
Version
2. Compile and set the development environment
2.1 Get the EOS
source code and all its submodules
$ git clone https://github.com/eosio/eos --recursive
If the code is cloned without --recursive
parameters, you can switch to the project path and execute the following command to update the submodule.
$ git submodule update --init --recursive
2.2 Compile source code to generate executable file
Switch to the above project root directory and execute the following command.
liyuechun:eos yuechunli$ ./eosio_build.sh darwin full
liyuechun:eos yuechunli$ ls
CMakeLists.txt debian ring.dot
CMakeModules docs ring.png
Docker eos-logo.png scripts
Doxyfile eos.doxygen.in star.dot
HEADER eosio_build.sh star.png
Jenkinsfile externals testnet-diagrams.sh
LICENSE.txt libraries testnet.md
README.md mesh.dot testnet.template
build mesh.png tests
circle.yml plugins tools
contracts programs
liyuechun:eos yuechunli$ ./eosio_build.sh darwin full
Beginning build version: 1.2
2018年 4月12日 星期四 07时44分06秒 UTC
git head id: 96ee0325cc925ff3e90f865ebc72b01341196e08
Current branch: * master
ARCHITECTURE: Darwin
OS name: Darwin
OS Version: 10.13.3
CPU speed: 250.00Ghz
CPU cores: 4
Physical Memory: 16 Gbytes
Disk space total: 465G
Disk space available: 133G
.....
漫长等待,半小时左右,网络不好的话,40 - 50分钟。
[100%] Linking CXX executable chain_test
ld: warning: PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in code signed PIE, but used in ___gmpn_divexact_1 from /usr/local/lib/libgmp.a(dive_1.o). To fix this warning, don't compile with -mdynamic-no-pic or link with -Wl,-no_pie
[100%] Built target chain_test
_______ _______ _______ _________ _______
( ____ \( ___ )( ____ \\__ __/( ___ )
| ( \/| ( ) || ( \/ ) ( | ( ) |
| (__ | | | || (_____ | | | | | |
| __) | | | |(_____ ) | | | | | |
| ( | | | | ) | | | | | | |
| (____/\| (___) |/\____) |___) (___| (___) |
(_______/(_______)\_______)\_______/(_______)
EOS.IO has been successfully built. 0:11:48
To verify your installation run the following commands:
/usr/local/bin/mongod -f /usr/local/etc/mongod.conf &
cd /Users/liyuechun/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
EOS
The accompanying executable program:
liyuechun:programs yuechunli$ pwd
/Users/liyuechun/Desktop/0402/eos/build/programs
liyuechun:programs yuechunli$ ls
CMakeFiles cmake_install.cmake keosd
CTestTestfile.cmake eosio-abigen nodeos
Makefile eosio-applesedemo
cleos eosio-launcher
liyuechun:programs yuechunli$
nodeos:
Block chain server node generation and formationcleos:
Interface commands for interacting with the blockchainkeosd:
EOS
walleteosio-launcher:
Application of Node Network Composition and Deployment
All these programs /eos/build/programs
exist in this folder.
2.3 Establish blockchain nodes
Change to the directory eos/build/programs/nodeos
below and execute the following command.
./nodeos
Commands can take --data-dir 节点文件夹名字
arguments , and the default folder is nodeos
.
liyuechun:nodeos yuechunli$ ./nodeos
As shown in the figure below, ./nodeos
after executing the program, there will be an error, and there are the following two prompts.
generating default genesis file /Users/liyuechun/Library/Application Support/eosio/nodeos/config/genesis.json
Indicates that a nodeos
node folder was created.
No producers configured! Please add producer IDs and private keys to configuration.
Express
liyuechun:nodeos yuechunli$ cd /Users/liyuechun/Library/Application\ Support/eosio/
liyuechun:eosio yuechunli$ ls
nodeos
liyuechun:eosio yuechunli$ cd nodeos/
liyuechun:nodeos yuechunli$ ls
config data
liyuechun:nodeos yuechunli$ cd config/
liyuechun:config yuechunli$ ls
config.ini genesis.json
liyuechun:config yuechunli$ cd ..
liyuechun:nodeos yuechunli$ ls
config data
liyuechun:nodeos yuechunli$ cd data/
liyuechun:data yuechunli$ ls
blocks default.wallet shared_mem
liyuechun:data yuechunli$
config
It is a blockchain configuration file, data
a blockchain transaction data, and a wallet data storage file. We need to modify config.ini
the relevant configuration in the file.
The content of my file is as follows:
# 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 = "/Users/liyuechun/Library/Application Support/eosio/nodeos/config/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
# Limits the maximum time (in milliseconds) that is allowed a to push deferred transactions at the start of a block (eosio::chain_plugin)
max-deferred-transaction-time = 20
# Override default WASM runtime (eosio::chain_plugin)
# wasm-runtime =
# 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 queue size between nodeos and MongoDB plugin thread. (eosio::mongo_db_plugin)
mongodb-queue-size = 256
# MongoDB URI connection string, see: https://docs.mongodb.com/master/reference/connection-string/. If not specified then plugin is disabled. Default database 'EOS' is used if not specified in URI. (eosio::mongo_db_plugin)
# mongodb-uri =
# 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-100) that must be participating in order to produce blocks (eosio::producer_plugin)
required-participation = 33
# 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"]
# 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. 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 =
# 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
# 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
You need to do the following settings:
- genesis-json = "/Users/liyuechun/Library/Application Support/eosio/nodeos/config/genesis.json"
- 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
Then start the ./nodeos
program again, and a block will be generated 0.5
every second .
liyuechun:nodeos yuechunli$ ./nodeos
2212313ms thread-0 chain_plugin.cpp:99 plugin_initialize ] initializing chain plugin
2212313ms thread-0 wallet_plugin.cpp:41 plugin_initialize ] initializing wallet plugin
2212313ms thread-0 http_plugin.cpp:141 plugin_initialize ] host: 127.0.0.1 port: 8888
2212313ms thread-0 http_plugin.cpp:144 plugin_initialize ] configured http to listen on 127.0.0.1:8888
2212313ms thread-0 net_plugin.cpp:2628 plugin_initialize ] Initialize net plugin
2212313ms thread-0 net_plugin.cpp:2644 plugin_initialize ] Setting net_plugin logging level to info
2212313ms thread-0 net_plugin.cpp:2669 plugin_initialize ] host: 0.0.0.0 port: 9876
2212313ms thread-0 net_plugin.cpp:2745 plugin_initialize ] my node_id is e03436889c70950da2180e6bc3b215d4283d078a54723ca32cd28c816aa4621b
2212313ms thread-0 main.cpp:90 main ] nodeos version 96ee0325
2212313ms thread-0 main.cpp:91 main ] eosio root is /Users/liyuechun/Library/Application Support
2212329ms thread-0 chain_plugin.cpp:208 plugin_startup ] starting chain in read/write mode
2212329ms thread-0 chain_plugin.cpp:213 plugin_startup ] Blockchain started; head block is #0, genesis timestamp is 2018-03-01T12:00:00.000
2212329ms thread-0 producer_plugin.cpp:161 plugin_startup ] producer plugin: plugin_startup() begin
2212329ms thread-0 producer_plugin.cpp:166 plugin_startup ] Launching block production for 1 producers.
*******************************
* *
* ------ NEW CHAIN ------ *
* - Welcome to EOSIO! - *
* ----------------------- *
* *
*******************************
Your genesis seems to have an old timestamp
Please consider using the --genesis-timestamp option to give your genesis a recent timestamp
2212330ms thread-0 producer_plugin.cpp:176 plugin_startup ] producer plugin: plugin_startup() end
2212330ms thread-0 http_plugin.cpp:213 plugin_startup ] start listening for http requests
2212330ms thread-0 wallet_api_plugin.cpp:70 plugin_startup ] starting wallet_api_plugin
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/create
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/get_public_keys
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/import_key
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/list_keys
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/list_wallets
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/lock
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/lock_all
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/open
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/set_timeout
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/sign_transaction
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/wallet/unlock
2212330ms thread-0 chain_api_plugin.cpp:62 plugin_startup ] starting chain_api_plugin
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/abi_bin_to_json
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/abi_json_to_bin
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_account
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_block
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_code
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_currency_balance
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_currency_stats
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_info
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_required_keys
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/get_table_rows
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/push_block
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/push_transaction
2212330ms thread-0 http_plugin.cpp:242 add_handler ] add api url: /v1/chain/push_transactions
2212330ms thread-0 net_plugin.cpp:2757 plugin_startup ] starting listener, max clients is 25
eosio generated block b8001d13... #1 @ 2018-04-12T08:36:52.500 with 0 trxs, lib: 0
eosio generated block 96eab818... #2 @ 2018-04-12T08:36:53.000 with 0 trxs, lib: 1
eosio generated block 635d105b... #3 @ 2018-04-12T08:36:53.500 with 0 trxs, lib: 2
eosio generated block 29ef0516... #4 @ 2018-04-12T08:36:54.000 with 0 trxs, lib: 3
eosio generated block 1fc1ac75... #5 @ 2018-04-12T08:36:54.500 with 0 trxs, lib: 4
eosio generated block 041d331f... #6 @ 2018-04-12T08:36:55.000 with 0 trxs, lib: 5
eosio generated block ebee3c7d... #7 @ 2018-04-12T08:36:55.500 with 0 trxs, lib: 6
eosio generated block eecd62a0... #8 @ 2018-04-12T08:36:56.000 with 0 trxs, lib: 7
eosio generated block c2b27ea5... #9 @ 2018-04-12T08:36:56.500 with 0 trxs, lib: 8
eosio generated block 6c66dc13... #10 @ 2018-04-12T08:36:57.000 with 0 trxs, lib: 9
eosio generated block 2534614c... #11 @ 2018-04-12T08:36:57.500 with 0 trxs, lib: 10
eosio generated block cce2934b... #12 @ 2018-04-12T08:36:58.000 with 0 trxs, lib: 11
eosio generated block 0165d88b... #13 @ 2018-04-12T08:36:58.500 with 0 trxs, lib: 12
eosio generated block fa240aa7... #14 @ 2018-04-12T08:36:59.000 with 0 trxs, lib: 13
eosio generated block 2965e8d4... #15 @ 2018-04-12T08:36:59.500 with 0 trxs, lib: 14
3. View block information
Re-open a terminal and switch to the following path.
liyuechun:cleos yuechunli$ ./cleos -p 8888 get info
{
"server_version": "96ee0325",
"head_block_num": 342,
"last_irreversible_block_num": 341,
"head_block_id": "0000015609ca5ec4f237bbe49e8eb3aa36dbe8ecec86133340567dad5caf01ba",
"head_block_time": "2018-04-12T08:39:43",
"head_block_producer": "eosio"
}
liyuechun:cleos yuechunli$ ./cleos -p 8888 get info
{
"server_version": "96ee0325",
"head_block_num": 359,
"last_irreversible_block_num": 358,
"head_block_id": "00000167a933b393bc3562ca2998080748a1ed24f79014848e7b0b34f2c0c429",
"head_block_time": "2018-04-12T08:39:51",
"head_block_producer": "eosio"
}