Part 1 - Teach you to sort out the ins and outs of building various EOS development environments

Speaker: Li Yuechun | Founder of Confucius Institute

Course consultation, add Lily WeChat (kongyixueyuan) consultation

At present, any EOSinformation about learning related technologies comes from https://github.com/EOSIO/eos . Maybe you EOSwill 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 EOSare too many versions, you need to know how to view EOSthe relevant information of the corresponding version first.

Open the EOS Githubofficial 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

  • EOSVersion

2. Compile and set the development environment

2.1 Get the EOSsource code and all its submodules

$ git clone https://github.com/eosio/eos --recursive

If the code is cloned without --recursiveparameters, 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
    2018412日 星期四 074406秒 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

EOSThe 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 formation
  • cleos:Interface commands for interacting with the blockchain
  • keosd: EOSwallet
  • eosio-launcher:Application of Node Network Composition and Deployment

All these programs /eos/build/programsexist in this folder.

2.3 Establish blockchain nodes

Change to the directory eos/build/programs/nodeosbelow and execute the following command.

./nodeosCommands can take --data-dir 节点文件夹名字arguments , and the default folder is nodeos.

liyuechun:nodeos yuechunli$ ./nodeos 

As shown in the figure below, ./nodeosafter 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.jsonIndicates that a nodeosnode 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$ 

configIt is a blockchain configuration file, dataa blockchain transaction data, and a wallet data storage file. We need to modify config.inithe 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 ./nodeosprogram again, and a block will be generated 0.5every 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"
}

4. Follow me

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324510578&siteId=291194637