Eos Build
EOS Build
1. EOS fork
2. 내 repository 에서 clone
>git clone https://github.com/$MY_REPOSITORY/eos.git
>cd eos
3. upstream 설정
>git remote add upstream https://github.com/EOSIO/eos.git
origin 과 upstream 이 제대로 설정되었는지 확인
>git remote -v
결과
origin https://github.com/$MY_REPOSITORY/eos.git (fetch)
origin https://github.com/$MY_REPOSITORY/eos.git (push)
upstream https://github.com/EOSIO/eos.git (fetch)
upstream https://github.com/EOSIO/eos.git (push)
4. stable release version 으로 checkout
2019년 1월 현재 stable release version 은 v1.5.2
이다.
release version 은 upstream 저장소에서 tag 로 등록이 되어있고, fork 시에 자신의 origin 저장소에 자동으로 유지된다.
release version 들에 대한 정보는 https://github.com/EOSIO/eos/releases 에서 확인할 수 있다.
- 참고로 RC 는 release candidate 라는 의미로, 다음 버전 release 를 위한 후보가 되는 커밋 시점을 구분하기 위해서 쓴다. 마지막으로 테스트하고 준비하기 위한 버전이라고 보면 된다. 정식 release version 이 아니다.
현재 version 이 붙은 태그들 확인
>git tag -l "v*"
v1.5.2 로 checkout
- tag 로 checkout 하면 branch 정보가 없다. 알아보기 쉽게 브랜치도 생성하면서 checkout 을 해주자.
>git checkout v1.5.2 -b v1.5.2
branch 의 정보를 확인하고 commit id 가 해당 버전이 맞는지 확인한다.
>git branch -v
다음과 같은 결과를 확인할 수 있다. master 브랜치와 commit id 가 다르다.
master ced8d7db0 Merge pull request #6547 from EOSIO/release/1.5.x
* v1.5.2 d34240966 Merge pull request #6504 from EOSIO/release/1.5.x
5. submodule 들 update
이 상태로 빌드 스크립트 ./eosio_build.sh
를 실행하면 git 이 다음과 같은 메세지를 내뱉는다.
git submodules are not up to date.
Please run the command 'git submodule update --init --recursive'.
안내 대로 위 명령어를 실행 시켜서 eos 가 사용하는 다른 모듈들을 다운로드 하자.
- 현재 EOS 는 cpp 구현체 프로젝트로 다른 cpp 모듈들을 많이 사용하고 있다. eos github 에서는 해당 모듈들을 링크만 해놓고 있다고 이해하면 된다. 빌드가 필요할 때 해당 모듈들을 다운로드 받아서 빌드한다. 이 명령어는 링크가 걸려있는 모듈들을 다운로드 하겠다는 git 에서 제공하는 명령어이다.
>git submodule update --init --recursive
다음과 같은 결과를 확인할 수 있다.
Submodule 'contracts/libc++/upstream' (https://github.com/EOSIO/libcxx.git) registered for path 'contracts/libc++/upstream'
Submodule 'contracts/musl/upstream' (https://github.com/EOSIO/musl.git) registered for path 'contracts/musl/upstream'
Submodule 'externals/binaryen' (https://github.com/EOSIO/binaryen) registered for path 'externals/binaryen'
Submodule 'externals/magic_get' (https://github.com/EOSIO/magic_get) registered for path 'externals/magic_get'
Submodule 'libraries/appbase' (https://github.com/eosio/appbase) registered for path 'libraries/appbase'
Submodule 'libraries/chainbase' (https://github.com/eosio/chainbase) registered for path 'libraries/chainbase'
Submodule 'libraries/fc' (https://github.com/EOSIO/fc) registered for path 'libraries/fc'
Submodule 'libraries/softfloat' (https://github.com/eosio/berkeley-softfloat-3) registered for path 'libraries/softfloat'
Submodule 'libraries/wabt' (http://github.com/EOSIO/wabt) registered for path 'libraries/wabt'
Cloning into '/Users/user/dev/eos/eos/contracts/libc++/upstream'...
Cloning into '/Users/user/dev/eos/eos/contracts/musl/upstream'...
Cloning into '/Users/user/dev/eos/eos/externals/binaryen'...
Cloning into '/Users/user/dev/eos/eos/externals/magic_get'...
Cloning into '/Users/user/dev/eos/eos/libraries/appbase'...
Cloning into '/Users/user/dev/eos/eos/libraries/chainbase'...
Cloning into '/Users/user/dev/eos/eos/libraries/fc'...
Cloning into '/Users/user/dev/eos/eos/libraries/softfloat'...
Cloning into '/Users/user/dev/eos/eos/libraries/wabt'...
warning: redirecting to https://github.com/EOSIO/wabt/
Submodule path 'contracts/libc++/upstream': checked out '2880ac42909d4bb29687ed079f8bb4405c3b0869'
Submodule path 'contracts/musl/upstream': checked out '8a34536ac9764c90c86cc0b62d0cda07449fd5d8'
Submodule path 'externals/binaryen': checked out '16d641f62ab14df845c87a63efe4d991b508d19a'
Submodule path 'externals/magic_get': checked out '89fda1da702e6c76a22bfb6233e9e3d0641708ec'
Submodule path 'libraries/appbase': checked out '1d6e6e4a0b334553658fe05cfa1e86081b6d0b4a'
Submodule path 'libraries/chainbase': checked out '8ca96ad6b18709d65a7d1f67f8893978f25babcf'
Submodule path 'libraries/fc': checked out 'a8613d3786cddfcc336808d2b9b7df655e6cc6d1'
Submodule 'secp256k1/upstream' (https://github.com/cryptonomex/secp256k1-zkp.git) registered for path 'libraries/fc/secp256k1/upstream'
Cloning into '/Users/user/dev/eos/eos/libraries/fc/secp256k1/upstream'...
Submodule path 'libraries/fc/secp256k1/upstream': checked out 'bd067945ead3b514fba884abd0de95fc4b5db9ae'
Submodule path 'libraries/softfloat': checked out '203b6df7dedc5bae1b2a7b1b23562335a6344578'
Submodule path 'libraries/wabt': checked out 'bf353aa719c88b7152ee09e7f877a507cb7df27b'
Submodule 'third_party/gtest' (https://github.com/google/googletest) registered for path 'libraries/wabt/third_party/gtest'
Submodule 'third_party/ply' (https://github.com/dabeaz/ply) registered for path 'libraries/wabt/third_party/ply'
Submodule 'third_party/testsuite' (https://github.com/WebAssembly/testsuite) registered for path 'libraries/wabt/third_party/testsuite'
Cloning into '/Users/user/dev/eos/eos/libraries/wabt/third_party/gtest'...
Cloning into '/Users/user/dev/eos/eos/libraries/wabt/third_party/ply'...
Cloning into '/Users/user/dev/eos/eos/libraries/wabt/third_party/testsuite'...
Submodule path 'libraries/wabt/third_party/gtest': checked out '7888184f28509dba839e3683409443e0b5bb8948'
Submodule path 'libraries/wabt/third_party/ply': checked out 'd776a2ece6c12bf8f8b6a0e65b48546ac6078765'
Submodule path 'libraries/wabt/third_party/testsuite': checked out '0b7f00081c62321a96ed67f5f651408c4ae17ec0'
!주의 : 이 과정은 내가 빌드하고자 하는 커밋 시점으로 체크아웃을 한 뒤에 수행해야 한다.
6. 빌드 스크립트 실행
1) 빌드 전 필수 패키지 설치
>./eosio_build.sh
다음과 같은 결과를 뱉는다.
Beginning build version: 1.2
Fri Jan 4 01:57:27 UTC 2019
User: user
git head id: ced8d7db063371aabe8deadb4120767a1d2406a0
Current branch: heads/v1.5.2
ARCHITECTURE: Darwin
OS name: Darwin
OS Version: 10.14.1
CPU speed: 2.20Ghz
CPU cores: 6
Physical Memory: 16 Gbytes
Disk install: /dev/disk1s1
Disk space total: 188G
Disk space available: 100G
Checking xcode-select installation
xcode-select installation found @
/usr/bin/xcode-select
Checking Ruby installation.
Ruby installation found @
/usr/bin/ruby
Checking Home Brew installation
Home Brew installation found @
/usr/local/bin/brew
Checking dependencies.
Checking automake ... automake NOT found.
Checking Libtool ... Libtool NOT found.
Checking OpenSSL ... OpenSSL found
Checking llvm ... llvm NOT found.
Checking wget ... wget NOT found.
Checking CMake ... CMake NOT found.
Checking GMP ... GMP NOT found.
Checking gettext ... gettext NOT found.
Checking MongoDB ... MongoDB NOT found.
Checking Doxygen ... Doxygen NOT found.
Checking Graphviz ... Graphviz NOT found.
Checking LCOV ... LCOV NOT found.
Checking Python3 ... Python3 found
The following dependencies are required to install EOSIO.
1. automake
2. Libtool
3. llvm
4. wget
5. CMake
6. GMP
7. gettext
8. MongoDB
9. Doxygen
10. Graphviz
11. LCOV
Do you wish to install these packages?
1) Yes
2) No
위 내용은 빌드를 하기 위해 필요한 프로그램들이 설치되어 있는지를 확인한 결과이다.
필자의 경우 OpenSSL 과 Python3 는 설치되어있었고, 나머지는 설치되어있지 않았다.
1
을 입력하고 엔터를 누르면 위에 NOT found 된 패키지들을 설치한다.
- 필자는 macOS 환경에서 진행했다. mac 의 경우 homebrew 를 통해서 설치를 진행하는 것을 알 수 있다.
brew install 과정에서 LDFAGS
와 CPPFLAGS
는 원래 brew 가 잡지 못한다. 그리고 PATH 를 따로 잡아줘야 하는 경우도 있다.
If you need to have sqlite first in your PATH run:
echo 'export PATH="/usr/local/opt/sqlite/bin:$PATH"' >> ~/.zshrc
For compilers to find sqlite you may need to set:
export LDFLAGS="-L/usr/local/opt/sqlite/lib"
export CPPFLAGS="-I/usr/local/opt/sqlite/include"
If you need to have openssl first in your PATH run:
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
For compilers to find openssl you may need to set:
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/inclu
If you need to have llvm@4 first in your PATH run:
echo 'export PATH="/usr/local/opt/llvm@4/bin:$PATH"' >> ~/.zshrc
For compilers to find llvm@4 you may need to set:
export LDFLAGS="-L/usr/local/opt/llvm@4/lib"
export CPPFLAGS="-I/usr/local/opt/llvm@4/inclu
brew 설치과정에서 로그들을 자세히 살펴보고 위와 같은 로그가 보인다면 따로 .exports 파일에 기록해서 해당 파일을 기본 shell 에서 source 로 적용해준다.
내가 따로 잡아준 .exports 파일은 다음과 같다.
export LDFLAGS="-L/usr/local/opt/sqlite/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/sqlite/include:$CPPFLAGS"
export LDFLAGS="-L/usr/local/opt/openssl/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/openssl/include:$CPPFLAGS"
export PATH=/usr/local/opt/openssl/bin:$PATH
export LDFLAGS="-L/usr/local/opt/llvm@4/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/llvm@4/include:$CPPFLAGS"
export PATH="/usr/local/opt/llvm@4/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/llvm@4/lib -Wl,-rpath,/usr/local/opt/llvm@4/lib:$LDFLAGS"
export LDFLAGS="-L/usr/local/opt/libffi/lib:$LDFLAGS"
2) 빌드
다시 빌드 스크립트를 실행한다.
>./eosio_build.sh
다음과 같은 console output 이 찍힌다면 앞선 과정이 잘 진행된 것이다.
Checking dependencies.
Checking automake ... automake found.
Checking Libtool ... Libtool found.
Checking OpenSSL ... OpenSSL found
Checking llvm ... llvm found.
Checking wget ... wget found.
Checking CMake ... CMake found.
Checking GMP ... GMP found.
Checking gettext ... gettext found.
Checking MongoDB ... MongoDB found.
Checking Doxygen ... Doxygen found.
Checking Graphviz ... Graphviz found.
Checking LCOV ... LCOV found.
Checking Python3 ... Python3 found
위의 dependency 가 모두 잘 설치되어있는지 확인했다면 자동으로 boost 라이브러리를 받아서 설치하고, 빌드를 수행할 것이다.
빌드과정은 식사하고 오면 될 정도로 꽤 오래 걸린다. 단, 초기에 sudo 비밀번호를 요구하고, 마지막 즈음에 또 요구한다. 비밀번호를 입력한 뒤에 밥먹고 오도록 한다.
Tip. 빌드 개선 point
현재 기본 CMAKE 를 이용해서 빌드하고 있는데 CMAKE 는 기본적으로 single thread 에서 빌드를 수행하기 때문에 규모가 큰 프로젝트에서는 빌드를 빠르게 하기 위한 다양한 방법들을 사용한다.
현재 EOS build 를 개선할만한 방법을 두 가지 정도 생각해볼 수 있다.
ninja 는 build 과정에서 옵션으로 주어서 하도록 제안하고 PR을 날려볼 계획이다.
ninja 를 EOS 팀이 받아들인다면, 빠른 빌드를 위한 옵션에 열려있다는 것으로 판단한고 이후에는 icecream 빌드를 plugin 형식으로 제안해 볼 계획이다.
3) 빌드 실패
빌드에 실패하면 다음과 같은 에러메세지가 나면서 빌드가 종료된다.(에러 원인은 각자 다를 수 있다.)
CMake Error at /usr/local/Cellar/cmake/3.13.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Failed to find Gettext libintl (missing: Intl_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/local/Cellar/cmake/3.13.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
/usr/local/Cellar/cmake/3.13.2/share/cmake/Modules/FindIntl.cmake:47 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
programs/cleos/CMakeLists.txt:29 (find_package)
-- Configuring incomplete, errors occurred!
See also "$MY_REPOSITORY/build/CMakeFiles/CMakeOutput.log".
>>>>>>>>>>>>>>>>>>>> CMAKE building EOSIO has exited with the above error.
자세한 빌드 로그는 "$MY_REPOSITORY/build/CMakeFiles/CMakeOutput.log"
에서 다시 확인할 수 있다.
위 로그는 gettext 패키지으 디렉토리를 못찾는 문제이다. 다음 명령어를 console 에 치면
>brew unlink gettext && brew link --force gettext
다음과 같은 결과를 얻는다.
Unlinking /usr/local/Cellar/gettext/0.19.8.1... 0 symlinks removed
Linking /usr/local/Cellar/gettext/0.19.8.1... 197 symlinks created
If you need to have this software first in your PATH instead consider running:
echo 'export PATH="/usr/local/opt/gettext/bin:$PATH"' >> ~/.zshrc
안내해 준대로 PATH 도 위에 설정한 .exports 파일에 설정하고 다시 source 를 해주자.
.exports
export LDFLAGS="-L/usr/local/opt/sqlite/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/sqlite/include:$CPPFLAGS"
export LDFLAGS="-L/usr/local/opt/openssl/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/openssl/include:$CPPFLAGS"
export PATH=/usr/local/opt/openssl/bin:$PATH
export LDFLAGS="-L/usr/local/opt/llvm@4/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/llvm@4/include:$CPPFLAGS"
export PATH="/usr/local/opt/llvm@4/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/llvm@4/lib -Wl,-rpath,/usr/local/opt/llvm@4/lib:$LDFLAGS"
export LDFLAGS="-L/usr/local/opt/libffi/lib:$LDFLAGS"
export PATH="/usr/local/opt/gettext/bin:$PATH"
빌드에 실패헀더라도 CMAKE 는 그 동안의 빌드 결과를 Cache 하고 있다. 따라서 오류를 해결한 뒤에 다시 빌드를 하더라도 처음부터 다 빌드하는 것이 아니라 빌드가 안되어 있는 부분만 골라서 빌드하기 때문에 크게 걱정하지 말고 오류를 해결하면 된다.
- 단, 빌드 디렉토리에 들어가면
CMakeCache.txt
파일과CMakeFiles
디렉토리를 확인할 수 있다. 이 파일들을 삭제하거나 수정한다면, 빌드를 처음부터 다시 수행해야하니 build 디렉토리를 건드리지 말고 잘 보존하면 된다.
4) 다시 빌드 실행
>./eosio_build.sh
다빌드를 수행하면, 다음 로그에서 보는 ***.bc
와 같이 기존의 빌드 성공한 부분은 그냥 지나가는 것을 확인할 수 있다.
[ 27%] Building LLVM bitcode thread.cpp.bc
[ 28%] Building LLVM bitcode setlocale.c.bc
[ 28%] Building C object libraries/softfloat/CMakeFiles/softfloat.dir/source/extF80M_to_ui32_r_minMag.c.o
[ 28%] Building LLVM bitcode typeinfo.cpp.bc
[ 28%] Building LLVM bitcode strcoll.c.bc
[ 28%] Building C object libraries/softfloat/CMakeFiles/softfloat.dir/source/extF80M_to_ui64_r_minMag.c.o
[ 28%] Building LLVM bitcode utility.cpp.bc
[ 28%] Building LLVM bitcode strfmon.c.bc
[ 28%] Building C object libraries/softfloat/CMakeFiles/softfloat.dir/source/extF80M_to_i32_r_minMag.c.o
[ 28%] Building LLVM bitcode strxfrm.c.bc
[ 29%] Building LLVM bitcode valarray.cpp.bc
[ 29%] Building LLVM bitcode textdomain.c.bc
Tip. 개선 포인트
빌드를 수행 하다보면 waning 으로 unused-variable 또는 unused-parameter 로그를 확인할 수 있다.
이 unused 변수나 메소드를 지우는 것도 open source 의 contributor 가 되는 가장 빠르고 편한 방법이다.(갸꿀?)
- 단, 이런 작업은 브랜치를 최신 개발 브랜치에서 빌드를 수행하고 발생한 warning 을 보고 해야한다.
5) 빌드 성공
빌드에 성공하면 다음과 같은 결과를 확인할 수 있다.
[100%] Built target nodeos
_______ _______ _______ _________ _______
( ____ \( ___ )( ____ \\__ __/( ___ )
| ( \/| ( ) || ( \/ ) ( | ( ) |
| (__ | | | || (_____ | | | | | |
| __) | | | |(_____ ) | | | | | |
| ( | | | | ) | | | | | | |
| (____/\| (___) |/\____) |___) (___| (___) |
(_______/(_______)\_______)\_______/(_______)
EOSIO has been successfully built. 00:10:42
To verify your installation run the following commands:
/usr/local/bin/mongod -f /usr/local/etc/mongod.conf &
cd /Users/user/dev/eos/eos/build; make test
For more information:
EOSIO website: https://eos.io
EOSIO Telegram channel @ https://t.me/EOSProject
EOSIO resources: https://eos.io/resources/
EOSIO Stack Exchange: https://eosio.stackexchange.com
EOSIO wiki: https://github.com/EOSIO/eos/wiki
Tip. warning 에 대해서
빌드하다보면 warning 메세지들을 확인할 수 있다.
warning 이 있더라도 빌드하고 프로그램 실행에 문제는 없다. 하지만 프로그램이 돌다가 문제가 될 수 있는 warning 들이 있는데, 대표적인 것은 link 문제이다.
라이브러리 link 에 실패했다는 warning 들은 잘 기억하고 있다가 해결할 수 있으면 해결하도록 하자.
처음 실행에는 문제가 없지만 특정 부분에서 해당 링크때문에 프로그램이 죽는 경우가 발생할 수 있다.
7. 테스트
위 빌드 성공 메세지에서 안내해 준 대로 빌드 결과를 테스트해보자.
>/usr/local/bin/mongod -f /usr/local/etc/mongod.conf & cd /Users/user/dev/eos/eos/build; make test
EOS 깃허브에 tests 디렉토리를 보면 test 파일들을 확인할 수 있다. cpp 테스트 도구로 boost::test
를 이용하고 있는 것을 확인할 수 있다.
다음과 같은 테스트 결과를 확인할 수 있다. (약 한시간 넘게 걸렸다 ㅠ_ㅠ)
98% tests passed, 1 tests failed out of 49
Label Time Summary:
long_running_tests = 3591.89 sec*proc (8 tests)
nonparallelizable_tests = 869.02 sec*proc (13 tests)
Total Test time (real) = 4786.06 sec
The following tests FAILED:
34 - nodeos_run_test-mongodb (Failed)
Errors while running CTest
make: *** [test] Error 8
8. 실행
$EOS_HOME/build/bin 디렉토리에서 아래 명령어를 실행한다.
>./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --http-validate-host=false
위와 같은 명령어로 실행하면 싱글노드로 구성된 테스트넷이 실행되고 transaction 이 없더라도 블록을 빠르게 생성한다.
info 2019-01-09T04:33:57.791 thread-0 chain_plugin.cpp:333 plugin_initialize ] initializing chain plugin
info 2019-01-09T04:33:57.796 thread-0 block_log.cpp:134 open ] Log is nonempty
info 2019-01-09T04:33:57.797 thread-0 block_log.cpp:161 open ] Index is nonempty
info 2019-01-09T04:33:57.804 thread-0 http_plugin.cpp:422 plugin_initialize ] configured http to listen on 127.0.0.1:8888
info 2019-01-09T04:33:57.804 thread-0 net_plugin.cpp:2898 plugin_initialize ] Initialize net plugin
info 2019-01-09T04:33:57.804 thread-0 net_plugin.cpp:2924 plugin_initialize ] host: 0.0.0.0 port: 9876
info 2019-01-09T04:33:57.804 thread-0 net_plugin.cpp:2995 plugin_initialize ] my node_id is 0671eca3a82e65650417b8c715db6710b7ce0337752767db7acea3e2f3e86389
info 2019-01-09T04:33:57.804 thread-0 main.cpp:107 main ] nodeos version v1.5.2
info 2019-01-09T04:33:57.804 thread-0 main.cpp:108 main ] eosio root is /Users/user/Library/Application Support
info 2019-01-09T04:33:57.805 thread-0 main.cpp:109 main ] nodeos using configuration file /Users/user/Library/Application Support/eosio/nodeos/config/config.ini
info 2019-01-09T04:33:57.805 thread-0 main.cpp:110 main ] nodeos data directory is /Users/user/Library/Application Support/eosio/nodeos/data
info 2019-01-09T04:33:57.805 thread-0 chain_plugin.cpp:724 plugin_startup ] starting chain in read/write mode
info 2019-01-09T04:33:57.805 thread-0 chain_plugin.cpp:728 plugin_startup ] Blockchain started; head block is #19, genesis timestamp is 2018-06-01T12:00:00.000
info 2019-01-09T04:33:57.805 thread-0 http_plugin.cpp:486 plugin_startup ] start listening for http requests
info 2019-01-09T04:33:57.806 thread-0 chain_api_plugin.cpp:77 plugin_startup ] starting chain_api_plugin
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/abi_bin_to_json
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/abi_json_to_bin
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_abi
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_account
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_block
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_block_header_state
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_code
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_code_hash
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_currency_balance
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_currency_stats
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_info
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_producer_schedule
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_producers
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_raw_abi
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_raw_code_and_abi
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_required_keys
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_scheduled_transactions
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_table_by_scope
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_table_rows
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/get_transaction_id
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/push_block
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/push_transaction
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/chain/push_transactions
info 2019-01-09T04:33:57.806 thread-0 history_api_plugin.cpp:38 plugin_startup ] starting history_api_plugin
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/history/get_actions
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/history/get_controlled_accounts
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/history/get_key_accounts
info 2019-01-09T04:33:57.806 thread-0 http_plugin.cpp:554 add_handler ] add api url: /v1/history/get_transaction
info 2019-01-09T04:33:57.807 thread-0 net_plugin.cpp:3014 plugin_startup ] starting listener, max clients is 25
info 2019-01-09T04:33:57.807 thread-0 producer_plugin.cpp:718 plugin_startup ] producer plugin: plugin_startup() begin
info 2019-01-09T04:33:57.807 thread-0 producer_plugin.cpp:740 plugin_startup ] Launching block production for 1 producers at 2019-01-09T04:33:57.807.
warn 2019-01-09T04:33:57.808 thread-0 transaction_context.cp:108 deadline_timer ] Using polled checktime; deadline timer too inaccurate: min:5us max:2539us mean:517us stddev:669us
info 2019-01-09T04:33:57.810 thread-0 producer_plugin.cpp:752 plugin_startup ] producer plugin: plugin_startup() end
info 2019-01-09T04:33:58.005 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 000000140b5a18be... #20 @ 2019-01-09T04:33:58.000 signed by eosio [trxs: 0, lib: 19, confirmed: 0]
info 2019-01-09T04:33:58.507 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 000000157a146800... #21 @ 2019-01-09T04:33:58.500 signed by eosio [trxs: 0, lib: 20, confirmed: 0]
info 2019-01-09T04:33:59.001 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 000000162c702c97... #22 @ 2019-01-09T04:33:59.000 signed by eosio [trxs: 0, lib: 21, confirmed: 0]
info 2019-01-09T04:33:59.505 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 0000001705c10feb... #23 @ 2019-01-09T04:33:59.500 signed by eosio [trxs: 0, lib: 22, confirmed: 0]
info 2019-01-09T04:34:00.001 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 00000018b617f7c4... #24 @ 2019-01-09T04:34:00.000 signed by eosio [trxs: 0, lib: 23, confirmed: 0]
info 2019-01-09T04:34:00.504 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 00000019c24ce82e... #25 @ 2019-01-09T04:34:00.500 signed by eosio [trxs: 0, lib: 24, confirmed: 0]
info 2019-01-09T04:34:01.003 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 0000001abd632209... #26 @ 2019-01-09T04:34:01.000 signed by eosio [trxs: 0, lib: 25, confirmed: 0]
info 2019-01-09T04:34:01.504 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 0000001bbc691b8e... #27 @ 2019-01-09T04:34:01.500 signed by eosio [trxs: 0, lib: 26, confirmed: 0]
info 2019-01-09T04:34:02.003 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 0000001c603e4dfe... #28 @ 2019-01-09T04:34:02.000 signed by eosio [trxs: 0, lib: 27, confirmed: 0]
info 2019-01-09T04:34:02.503 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 0000001d6747a523... #29 @ 2019-01-09T04:34:02.500 signed by eosio [trxs: 0, lib: 28, confirmed: 0]
^Cinfo 2019-01-09T04:34:02.983 thread-0 net_plugin.cpp:3046 plugin_shutdown ] shutdown..
info 2019-01-09T04:34:02.983 thread-0 net_plugin.cpp:3049 plugin_shutdown ] close acceptor
info 2019-01-09T04:34:02.983 thread-0 net_plugin.cpp:3052 plugin_shutdown ] close 0 connections
info 2019-01-09T04:34:02.983 thread-0 net_plugin.cpp:3060 plugin_shutdown ] exit shutdown