AD-MARTECH LABO

アドテク・マーテクを中心に、最新技術を片っ端から総ナメして、分かった気になるブログ

自作仮想通貨をマイニングしてみた

f:id:tetsuyaimagawa:20170702153540j:plain

前回までのあらすじ

tetsuyaimagawa.hatenablog.com

ICOで億万長者になるため、自作仮想通貨錬成に奮闘していた筆者は、ついにブロックチェーンの始まりである "ジェネシス" の生成に成功する。
伝説が本当なら、bitcoinジェネシスを上書きしてマイニングすれば、新たなブロックチェーンが生まれるはずである…

今回のあらすじ

そもそもオリジナルのbitcoinをマイニングしたことない私は、チュートリアルにしたがってはじめてのマイニングをすることにした。

やり方

ここへ来て(早速)最初の関門にぶち当たる。
GithubのREADME.mdには、どうやって起動するのかが書いていないのだ。ネットの海を彷徨った結果、気付く…
最も丁寧なチュートリアルは、docディレクトリの中に入っていた。灯台下暗し。

github.com

ビルド

公式チュートリアルを見るまで、色々なエラーに悩まされていたが、結局は必要なものをインストールしていなかっただけで、全部ぶりゅぶりゅすれば解決した。

以下2ステップは問題なく終了。

$ ./autogen.sh
$ ./configure

Options used to compile and link:
  with wallet   = yes
  with gui / qt = yes
    qt version  = 5
    with qr     = auto
  with zmq      = no
  with test     = yes
  with bench    = yes
  with upnp     = yes
  debug enabled = no
  werror        = no

  target os     = darwin
  build os      = darwin

  CC            = gcc
  CFLAGS        = -g -O2
  CPPFLAGS      =  -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS -I/usr/local/opt/berkeley-db@4/include -DMAC_OSX
  CXX           = g++ -std=c++11
  CXXFLAGS      = -g -O2 -Wall -Wextra -Wformat -Wvla -Wformat-security -Wno-unused-parameter -Wno-self-assign -Wno-unused-local-typedef -Wno-deprecated-register
  LDFLAGS       =  -Wl,-headerpad_max_install_names -Wl,-dead_strip


makeも、なんかワーニングでてるけど、華麗にスルー。

$ make
  CXXLD    libbitcoinconsensus.la
clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument]
  CXX      bitcoind-bitcoind.o
bitcoind.cpp:157:17: warning: 'daemon' is deprecated: first deprecated in macOS 10.5 - Use posix_spawn APIs instead. [-Wdeprecated-declarations]
            if (daemon(1, 0)) { // don't chdir (1), do close FDs (0)
                ^
/usr/include/stdlib.h:285:6: note: 'daemon' has been explicitly marked deprecated here
int      daemon(int, int) __DARWIN_1050(daemon) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_0, __MAC_10_5, __IPHONE_2_0, __IPHONE_2_0, "Use posix_spawn APIs instead.") __WATCHOS_PROH...
         ^
1 warning generated.

  CXX      qt/qt_libbitcoinqt_a-notificator.o
qt/notificator.cpp:66:27: warning: 'LSGetApplicationForInfo' is deprecated: first deprecated in macOS 10.10 - Use LSCopyDefaultApplicationURLForContentType instead.
      [-Wdeprecated-declarations]
        OSStatus status = LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator, CFSTR("growlTicket"), kLSRolesAll, 0, &cfurl);
                          ^
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfoDeprecated.h:631:1: note: 'LSGetApplicationForInfo' has been explicitly marked deprecated
      here
LSGetApplicationForInfo(
^
1 warning generated.

Making all in doc/man
make[1]: Nothing to be done for `all'.
make[1]: Nothing to be done for `all-am'.

テスト

テストする。問題なくスルー。

$ make check
Making check in src
  CXX      libbitcoin_common_a-chainparams.o
  AR       libbitcoin_common.a
  CXXLD    bitcoind
  CXXLD    bitcoin-tx
  CXXLD    test/test_bitcoin
  CXXLD    bench/bench_bitcoin
  OBJCXXLD qt/bitcoin-qt
  CXXLD    qt/test/test_bitcoin-qt
  CXXLD    test/test_bitcoin_fuzzy
/Applications/Xcode.app/Contents/Developer/usr/bin/make  check-TESTS check-local
PASS: test/test_bitcoin
PASS: qt/test/test_bitcoin-qt
============================================================================
Testsuite summary for Bitcoin Core 0.14.2
============================================================================
# TOTAL: 2
# PASS:  2
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
Running test/bitcoin-util-test.py...
  CC       src/tests-tests.o
  CCLD     tests
  CC       src/exhaustive_tests-tests_exhaustive.o
  CCLD     exhaustive_tests
/Applications/Xcode.app/Contents/Developer/usr/bin/make  check-TESTS
PASS: tests
PASS: exhaustive_tests
============================================================================
Testsuite summary for libsecp256k1 0.1
============================================================================
# TOTAL: 2
# PASS:  2
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
  CXX      test/test_unitester-unitester.o
  CXXLD    test/unitester
/Applications/Xcode.app/Contents/Developer/usr/bin/make  check-TESTS
PASS: test/unitester
============================================================================
Testsuite summary for univalue 1.0.2
============================================================================
# TOTAL: 1
# PASS:  1
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
Making check in doc/man
make[1]: Nothing to be done for `check'.
make[1]: Nothing to be done for `check-am'.

起動

RPC configuration fileを作ることを推奨されたので、何も考えず作成。

$ echo -e "rpcuser=bitcoinrpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/Bitcoin/bitcoin.conf"
$ cat ~/Library/Application\ Support/Bitcoin/bitcoin.conf 
rpcuser=bitcoinrpc
rpcpassword=XXXXXXXXXXXXXXXXXXXXXXXXXXX
$ sudo chmod 600 "/Users/${USER}/Library/Application Support/Bitcoin/bitcoin.conf"

起動アンドrun

$ ./src/bitcoind









動いたぁああぁ
f:id:tetsuyaimagawa:20170702144425p:plain








・・・






何か、








尋常じゃない勢いで何かをダウンロードしている。







これが俗に云うIBD (Initial Block Download)
これまでのブロックチェーンの歴史をか弱いMacbook Airに刻み込んでいるようだ。







数時間かかると言うので、ちょっと飲みに出かけることにした。




飲み会

2時間で帰ってくるつもりが、気づいたら10時間経っていた。昼飲み恐ろしい。




10時間後

家に帰るとMacbookは冷たくなっていた…
容量を使い果たしてしまったようだ。


どこぞの誰かの試算によると、テラ級で容量を食う模様。
bitcoin.stackexchange.com



ブロックは↓のパスに無限に保存されていく。
~/Library/Application Support/Bitcoin/blocks/blk00000.dat



私の場合は、50GBいったところでPCが昇天した。



ジェネシスとマークルを書き換える

さて、本題に戻り、前回錬成したジェネシスを設定ファイルに反映させてみる。

chainparams.cppの123と124行に、新しいジェネシスブロックとマークルを入れてみた。
github.com
このへんを書き換えろという指示はあったものの(前回記事参照)明確な指示はなかったので、ブロックチェーン職人としての勘で、この2行を書き換えた。



新たなるジェネシスの起動

さぁ、


もう一度 make してみよう。


$ make check
Making check in src
/Applications/Xcode.app/Contents/Developer/usr/bin/make  check-TESTS check-local
../build-aux/test-driver: line 107: 51375 Abort trap: 6           "$@" > $log_file 2>&1
FAIL: test/test_bitcoin
../build-aux/test-driver: line 107: 51385 Abort trap: 6           "$@" > $log_file 2>&1
FAIL: qt/test/test_bitcoin-qt
============================================================================
Testsuite summary for Bitcoin Core 0.14.2
============================================================================
# TOTAL: 2
# PASS:  0
# SKIP:  0
# XFAIL: 0
# FAIL:  2
# XPASS: 0
# ERROR: 0
============================================================================
See src/test-suite.log
Please report to https://github.com/bitcoin/bitcoin/issues
============================================================================
make[4]: *** [test-suite.log] Error 1
make[3]: *** [check-TESTS] Error 2
make[2]: *** [check-am] Error 2
make[1]: *** [check-recursive] Error 1
make: *** [check-recursive] Error 1





FAIL





_人人人人人人_
> 突 然 の FAIL <
 ̄YYYYYY ̄