visual studio による bitcoin プログラミング
TRANSCRIPT
![Page 1: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/1.jpg)
Visual Studio によるBitcoin プログラミング
kobake@ビットコインとか勉強会#7
![Page 2: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/2.jpg)
メモ2017/05/16(火) 19:30 〜 21:30ビットコインとか勉強会 #7 - connpasshttps://cryptocurrency.connpass.com/event/55848/19:35-20:00 Visual Studio による Bitcoin プログラミング (25分)
当スライドのURL(あとで Twitter とか connpass コメントとかに書く )https://goo.gl/IcLunM
------------------------------------------
本日の発表スライドです。
「Visual Studio による Bitcoin プログラミング」
https://goo.gl/IcLunM
#暗号通貨読書会 #ccstudy
------------------------------------------
・Slack https://ccstudy-slack.herokuapp.com/
・CoinTip https://cointip.jp/・アンケート:参加者の Windows/VisualStudio率
![Page 3: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/3.jpg)
自己紹介
@kobake_ (こばやん)
http://clock-up.jp/ clock-up.jphttp://blog.clock-up.jp/ clock-up-bloghttp://bitcoin.clock-up.jp/ Bitcoin ClockUpMemohttps://events.clock-up.jp/ clock-up-eventshttps://csugjp.connpass.com/ 日本C#ユーザ会
元ゲームプログラマ。
最近は C# / C++ / Bitcoin / ASP.NET MVC 等。
Visual Studio および ThinkPad 依存症。
![Page 4: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/4.jpg)
今日のお話
・Bitcoin Core のソースコードをバリバリいじっていきたい
・できれば Visual Studio でコーディング&デバッグできたら最高だよね
→ 実現しました(紆余曲折あり)
![Page 5: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/5.jpg)
今日のお話
・Bitcoin Core のソースコードをバリバリいじっていきたい
・できれば Visual Studio でコーディング&デバッグできたら最高だよね
→ 実現しました(紆余曲折あり)
☝今回はここの話が割と長いです。ご容赦。
![Page 6: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/6.jpg)
Q. 何故 Bitcoin Core のソースコードをいじるのか
・バグ修正?
・機能追加?
・ハードフォーク??
![Page 7: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/7.jpg)
Q. 何故 Bitcoin Core のソースコードをいじるのか
・バグ修正?
・機能追加?
・ハードフォーク??
↓NO (結果的にはコントリビュートにも繋がったが僕の本来の目的は違う)
![Page 8: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/8.jpg)
Q. 何故 Bitcoin Core のソースコードをいじるのか
A. Bitcoin Core のロジックを深く理解するため。
![Page 9: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/9.jpg)
Q. 何故 Bitcoin Core のソースコードをいじるのか
A. Bitcoin Core のロジックを深く理解するため。
Bitcoin Core の理解のステップ
・文献を読む (wiki および Mastering Bitcoin オススメ。あと論文もね。)
・普通に動かす
・設定をいじって動かす
・コードを読む
・コードを改造して動かす ← 今ココ
![Page 10: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/10.jpg)
HostHostHost
Bitcoin のおおまかな仕組み
bitcoind(ノード本体)
bitcoin-cli(コマンドライン
ツール)
bitcoind(ノード本体)
bitcoind(ノード本体)
![Page 11: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/11.jpg)
ノード構築
Host
bitcoind(ノード本体)
bitcoin-cli(コマンドライン
ツール)
regtest=1
server=1rpcuser=hogerpcpassword=xxxxx
~/.bitcoin/bitcoin.conf
※今回は実験ネットワークを構築するので regtest=1 とします
これらは実行バイナリをDLしてきて設置。またはビルドにより構築。
今回は実行バイナ
リをDLしてくるので
はなく、ビルドにより
バイナリを生成しま
す。
![Page 12: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/12.jpg)
ビルドについて
・今回は Bitcoin の「デバッグ環境」を構築するので、当然「ビルド」が必要。
・各プラットフォームにおけるビルド手順は公開されている。
https://github.com/bitcoin/bitcoin/blob/master/doc/build-osx.mdhttps://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.mdhttps://github.com/bitcoin/bitcoin/blob/master/doc/build-openbsd.mdhttps://github.com/bitcoin/bitcoin/blob/master/doc/build-windows.md
![Page 13: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/13.jpg)
Windowsビルドについて
https://github.com/bitcoin/bitcoin/blob/master/doc/build-windows.mdこれ、Windows ビルドと言いながら実は Ubuntu on Windows を使ってます。
一応 MinGW を通す形になるので .exe 形式の実行ファイルができます。
![Page 14: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/14.jpg)
Windowsビルドについて
https://github.com/bitcoin/bitcoin/blob/master/doc/build-windows.mdこれ、Windows ビルドと言いながら実は Ubuntu on Windows を使ってます。
一応 MinGW を通す形になるので .exe 形式の実行ファイルができます。が、
![Page 15: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/15.jpg)
Windowsビルドについて
https://github.com/bitcoin/bitcoin/blob/master/doc/build-windows.mdこれ、Windows ビルドと言いながら実は Ubuntu on Windows を使ってます。
一応 MinGW を通す形になるので .exe 形式の実行ファイルができます。が、
→ 邪道では?
![Page 16: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/16.jpg)
Windowsビルドについて
https://github.com/bitcoin/bitcoin/blob/master/doc/build-windows.mdこれ、Windows ビルドと言いながら実は Ubuntu on Windows を使ってます。
一応 MinGW を通す形になるので .exe 形式の実行ファイルができます。が、
→ 邪道では?
→ msbuild させろ!
![Page 17: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/17.jpg)
ところで MinGW gcc デバッグビルドに関する罠
本当のところを言うと、最初は MinGW の gcc ビルドしたやつのデバッグで良いかな、と
思ってました。ところで Bitcoin Core のビルド時には configure にデバッグビルドオプ
ションが付けられます。(これを付けると gcc に「-g3 -O0」オプションが付きます)
$ ./autogen.sh$ ./configure --enable-debug$ make…..
![Page 18: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/18.jpg)
ところで MinGW gcc デバッグビルドに関する罠
本当のところを言うと、最初は MinGW の gcc ビルドしたやつのデバッグで良いかな、と
思ってました。ところで Bitcoin Core のビルド時には configure にデバッグビルドオプ
ションが付けられます。(これを付けると gcc に「-g3 -O0」オプションが付きます)
$ ./autogen.sh$ ./configure --enable-debug$ make…..Fatal error: can't close libbitcoin_server_a-validation.o: File too big→ bitcoind 関連モジュールがでかすぎてビルド失敗する…
![Page 19: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/19.jpg)
MinGW gcc 通常ビルドで仕切り直し
--enable-debug オプションを外せばビルドは通るが…。
$ ./autogen.sh$ ./configure$ make$ ls -l ./src/bitcoind.exe-rwxr-xr-x 1 kobake kobake 194375094 Feb 10 21:04 ./src/bitcoind.exe
![Page 20: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/20.jpg)
MinGW gdb の罠
$ gdb ./src/bitcoind.exe
(gdb) b mainBreakpoint 1 at 0x88a910: file bitcoind.cpp, line 190.(gdb) startTemporary breakpoint 2 at 0x88a910: file bitcoind.cpp, line 190.Starting program: C:\opensource\bitcoin-32bit\src\bitcoind.exe….This application has requested the Runtime to terminate it in an unusual way.Please contact the application's support team for more information.→ 何故か落ちる
![Page 21: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/21.jpg)
MinGW gdb の罠:検証
・いろいろ手あたり次第試した結果ですが、プログラムのサイズが大きすぎると MinGW gdb がうまく動かないようです。(bitcoind を構成するコードを大きく削り落としたら gdb でもデバッグできるようになった。サイズまたはシンボル数の問題かと思われる)
・MSYS2 / MinGW-w64 等の環境でも試してみたが、やはり同様の問題に遭遇。(gdb でブレークポイントが張れなかったり異常終了したり)
・とにかく MinGW 系の環境だと、サイズの大きいプログラムのデバッグに難がある(根
本的な原因は不明)ようなので、今回は諦める。
![Page 22: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/22.jpg)
というわけで
MinGW のことは一旦忘れる
![Page 23: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/23.jpg)
というわけで
MinGW のことは一旦忘れる
↓結局 Linux バイナリが安定デバッグで
きるのでそっちに寄せよう
![Page 24: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/24.jpg)
最も簡単な(?) Visual Studio による Bitcoin デバッグ
Linux
bitcoind bitcoin codeビルド
gdb
Windows
Visual StudioWinGDB
bitcoin code
dependencies・OpenSSL・livevent・boost・libzmq等、諸々
同期
dependencies
同期?
ssh tunnel
attach
![Page 25: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/25.jpg)
最も簡単な(?) Visual Studio による Bitcoin デバッグ
Linux
bitcoind bitcoin codeビルド
gdb
Windows
Visual StudioWinGDB
bitcoin code
dependencies・OpenSSL・livevent・boost・libzmq等、諸々
同期
dependencies
同期?
ssh tunnel
attach
このへんの同期めんどい
![Page 26: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/26.jpg)
最も簡単な(?) Visual Studio による Bitcoin デバッグ
Linux
bitcoind bitcoin codeビルド
gdb
Windows
Visual StudioWinGDB
dependencies・OpenSSL・livevent・boost・libzmq等、諸々
ssh tunnel
attach
sambasamba を介することで同期問題解消
![Page 27: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/27.jpg)
最も簡単な(?) Visual Studio による Bitcoin デバッグ
Linux
bitcoind bitcoin codeビルド
gdb
Windows
Visual StudioWinGDB
dependencies・OpenSSL・livevent・boost・libzmq等、諸々
ssh tunnel
attach
samba
悪くないけど重い
samba を介することで同期問題解消
![Page 28: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/28.jpg)
最も簡単な(?) Visual Studio による Bitcoin デバッグ
Linux
bitcoind bitcoin codeビルド
gdb
Windows
Visual StudioWinGDB
dependencies・OpenSSL・livevent・boost・libzmq等、諸々
ssh tunnel
attach
samba
悪くないけど重い
実はこっちも重い。辛い。
samba を介することで同期問題解消
![Page 29: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/29.jpg)
一応 WinGDB によるデバッグ模様を共有
https://twitter.com/kobake_/status/815338953691664384
AWS EC2 インスタンス上の Amazon Linux で bitcoind を動かしてます。
それを手元の ThinkPad からリモートデバッ
グ。このために WinGDB を買った ($89)。
リッチではある。だが、重い。
![Page 30: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/30.jpg)
WinGDB によるアタッチは悪くないが
・パフォーマンスが悪いので気持ちが辛くなってきた。
![Page 31: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/31.jpg)
もう…msbuild対応するぞ
![Page 32: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/32.jpg)
いっそ msbuild 対応するぞ
・理想を言うと Visual Studio で .sln ファイル開いて「ビルドメニュー」ポチッ1発で Bitcoin Core 起動したいんじゃ。
![Page 33: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/33.jpg)
いっそ msbuild 対応するぞ
・理想を言うと Visual Studio で .sln ファイル開いて「ビルド」メニューをポチッ1発で Bitcoin Core 起動したいんじゃ。
↓実現しました。
https://github.com/kobake/bitcoin-msvc・Visual Studio 2015 ビルドに対応するまでに苦節71コミット。
・gcc と msvc の差異を吸収する対応、および、ライブラリ依存解決(後述)。
・途中で Visual Studio 2017 が登場したのでそちらにも後から対応。
(この時点で Visual Studio 2015 対応は切り捨てたのでご注意)
・現時点で187コミット。絶賛リファクタ中なので汚いところはご容赦。
![Page 34: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/34.jpg)
Visual Studio 版 Bitcoin の依存解決
・msbuild でやる以上、automake とか yum とかの仕組みは使えない
・そもそもビルドするための環境準備を各人にやらせるのは不毛
・依存解決は全自動の方向
![Page 35: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/35.jpg)
Visual Studio 版 Bitcoin の依存解決
・msbuild でやる以上、automake とか yum とかの仕組みは使えない
・そもそもビルドするための環境準備を各人にやらせるのは不毛
・依存解決は全自動の方向
→ NuGet Gallery を用いる。
![Page 36: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/36.jpg)
NuGet Gallery について
・主に .NET 系のライブラリを登録するリポジトリだが、.NET 関係ない C++ 系ライブラリ
等も利用できる。
・Visual Studioプロジェクトの依存先として NuGet パッケージを指定しておくと、ビルド時
に必要なパッケージを自動的にダウンロードして依存解決してくれる。
・立ち位置としては Ruby でいうところの gem とか Python でいうところの pip みたいなも
の。
・Microsoft アカウントがあれば誰でもパッケージを登録できる。
・Boost C++ Libraries 等のメジャーなライブラリパッケージは既に存在しているのでそれ
を利用。
![Page 37: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/37.jpg)
NuGet Gallery について
・大変便利なリポジトリではあるが、C++ 系のライブラリ登録数はそれほど多くない(やはり .NET 系、
つまり主に C# 用のものが多い)
・Bitcoin Core を Visual Studio 2015 でビルドするのに必要としたパッケージhttps://www.nuget.org/packages/boost/ (既存)
https://www.nuget.org/packages/libzmq-nightly/ (既存)
https://www.nuget.org/packages/openssl/ (既存)
https://www.nuget.org/packages/libevent2-vc140/ (新規)
https://www.nuget.org/packages/miniupnpc-vc140/ (新規)
https://www.nuget.org/packages/leveldb-vc140/ (新規)
https://www.nuget.org/packages/secp256k1_vc140/ (新規)
※(新規)と記載したパッケージは kobake が独自に NuGet パッケージ登録を行った。
![Page 38: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/38.jpg)
NuGet Gallery について
・Bitcoin Core を Visual Studio 2017 でビルドするのに必要としたパッケージhttps://www.nuget.org/packages/boost/ (既存)
https://www.nuget.org/packages/libevent2-vc140/ (新規。2015用に作ったものを流用 )
https://www.nuget.org/packages/miniupnpc-vc140/ (新規。2015用に作ったものを流用 )
https://www.nuget.org/packages/leveldb-vc140/ (新規。2015用に作ったものを流用 )
https://www.nuget.org/packages/openssl-vc141/ (新規)
https://www.nuget.org/packages/libzmq-vc141/ (新規)
https://www.nuget.org/packages/secp256k1-vc141/ (新規)
※(新規)と記載したパッケージは kobake が独自に NuGet パッケージ登録を行った。
![Page 39: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/39.jpg)
時々PR
github/kobake/bitcoin-msvc
bitcoin-msvc.sln
NuGet Gallery についてNuGet Repository
boost libevent2-vc140 miniupnpc-vc140
leveldb-vc140
openssl-vc141 libzmq-vc141secp256k1-vc141
github/bitcoin/bitcoin
_bitcoin_common.vcxproj
bitcoind.vcxproj
fork元
これだけ既存(それ以外は kobake がパッケージング)
sample.vcxproj
bitcoin-cli.vcxproj
![Page 40: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/40.jpg)
NuGet Gallery の kobake 登録パッケージ現状
人様のライブラリを勝手に NuGet 化しまくった結果。
※怒られたら何かしら対応考えます。
※一応この中では BitflyerApi だけは自作ライブラリです(ぼそり)
![Page 41: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/41.jpg)
さて早速デバッグ環境を活用しましょう
https://github.com/kobake/bitcoin-msvc
このリポジトリ上の .sln ファイルを Visual Studio 2017 で
開くだけでビルドできます。
![Page 42: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/42.jpg)
さて早速デバッグ環境を活用しましょう
例:鍵データを作る単体実験を行ってみる(時間あればデモ)
https://github.com/kobake/bitcoin-msvc/blob/master/sample/sample.cppint main(){ ECC_Start();
CKey key; key.MakeNewKey(false);
CPubKey pubkey = key.GetPubKey(); uint256 hash = pubkey.GetPublicKeyHash(); // 256bits = 32bytes binary
// 64文字長HEX文字列 例: "65d5f35db59351506de1da46cfc33005d5d6e2325667ed70c42f5bcb8a944b8d" std::string hashStr = hash.ToHexString(); printf("PUBLIC HASH: %s (%d)\n", hashStr.c_str(), hashStr.length());
ECC_End();}
![Page 43: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/43.jpg)
さて早速デバッグ環境を活用しましょう
例:bitcoind等も当然起動できる(時間あればデモ)
![Page 44: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/44.jpg)
デバッグ環境構築による成果
・PRが1件マージされました (2017年3月4日)https://github.com/bitcoin/bitcoin/pull/9916
・プログラム上の問題を発見・レポートできました (2017年3月21日)https://github.com/bitcoin/bitcoin/issues/10041
![Page 45: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/45.jpg)
眺める・動かす・改造する
・まずは動かす。これは基本です。
・次のステップとして設定をいじりまくってみる。
・さらに次のステップとしてプログラム本体の改造とかしてみる。
これが「本物の」理解への近道です。
みんなソースコードいじっていきましょう。
ついでにコントリビュートもしていきましょう。
![Page 46: Visual Studio による Bitcoin プログラミング](https://reader033.vdocuments.pub/reader033/viewer/2022052209/5a688eb37f8b9a4a258b5f31/html5/thumbnails/46.jpg)
宣伝
・2017年5月22日(月) 秋葉原 Web系もくもく会#2
https://general.connpass.com/event/57503/
・2017年6月予定(日程調整中) Webフレームワーク品評会:登壇者募集中
http://qiita.com/kobake@github/items/9394b66430de1951fbcc