Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
C# でブロックチェーン実装
竹井 悠人
ソフトウェア エンジニア
株式会社 bitFlyer
免責
このトークは、情報提供のみを目的として行われており、正確性・最新性についての保
障は一切ありません。内容は、会社の見解ではありません。この情報を元にして生じた
不利益について、当社およびスピーカは一切の責任を負いません。
bitFlyer...
開発に参加する人むけに必要な具材
● .NET Core SDK
今日使うコードベースは.NET Core 向けに書かれていますゆえ
https://www.microsoft.com/net/download/core
(.NET Core ...
自己紹介
Yuto Takei
Software Engineer ここに何か面白いこと書く
BTC 送金お待ちしております
本日の話の構成
● bitFlyer での C#
● MinChain の構成について
● うごかしてみる
bitFlyer について
● ビットコインの取引所を運営
● ブロックチェーン関連の研究調査プロダクトの提供
● 事例紹介
https://blogs.technet.microsoft.com/mpn_japan/2016/
02/16/p...
システム構成
Redis Cache
● 口座画面 / 販売所
● Lightning
● chainFlyer
● マーケット処理
● 取引約定
● バッチ処理
Web Apps
Worker Roles
SQL Server
Web Rol...
クラウドならではのこと
3/8 (水) 夜 (JST) に Azure で障害が起きた際も、
東日本 → 西日本のマイグレーションで2 時間弱ほどで復旧
クラウドならではのこと
3/8 (水) 夜 (JST) に Azure で障害が起きた際も、
東日本 → 西日本のマイグレーションで2 時間弱ほどで復旧
bitFlyer からのトランザクションの流れ
bitFlyer で作られた
トランザクション
Bitcoin Core (bitcoind)
クライアント
おそとの
世界
すぐに .NET Core に行けるの?
YES!!
暗号面での強い味方
● Bouncy Castle PCL
https://www.nuget.org/packages/Portable.BouncyCastle/
System.Security.Cryptography 名前空間下の実装を...
I Can Has .NET Core
.NET Core へ移行可能か
調べることができる
https://icanhasdot.net/
MinChain について
全体の機能相関図
Executor
Mining
KeyGenerator
Config
Genesis
ツール群
InventoryManagerConnectionManager
解釈前のブロック保持
Memory Pool 保持
Inve...
GitHub においてあります
https://github.com/yutopio/MinChain
MIT ライセンスなので、煮るなり焼くなり、プルリク送るなりしてください
動かしてみましょう
ビルドする
.NET Core SDK が必要です
https://www.microsoft.com/net/download/core
VS2017 ユーザは .NET Core tools を入れれば
VS からビルドできるようになります
ビルドする
$ dotnet restore (依存する Nuget パッケージの取得)
Restoring packages for D:MinChainMinChainMinChain.csproj...
Generating MSBuil...
ビルドする
$ dotnet build (ビルドする)
Microsoft (R) Build Engine version 15.1.548.43366
Copyright (C) Microsoft Corporation. All ri...
鍵を生成する
ビルドしたバイナリがいるディレクトリに移動して実行
$ dotnet MinChain.dll genkey > key.json (自分のアドレス用の口座を作成する)
$ cat key.json
{
"pub": "WAAAA...
Genesis ブロックを作る
(自分のチェーンを作る場合。今回は行いません!)
$ dotnet MinChain.dll genesis key.json genesis.bin
Creating new genesis block.
{
...
config を作成する
(デフォルト config を生成できる。今回は行いません!)
$ dotnet MinChain.dll config > config.json
$ cat config.json
{
"listen": "0.0...
起動する
$ dotnet MinChain.dll run config.json
うまくいけば、本日のデモ用のサーバにつながり、
マイニングが始まります!
… どきどき
まとめ
Blockchain by C#
● やっと安定したマルチ プラットフォーム対応!
○ 暗号系ライブラリなども揃っている
○ ソースが見える安心感
○ Bitcoin Core などとの高い運用性
● ブロックチェーンの実装が C# + .NE...
一緒にブロックチェーンを紡ぎましょう
Miyabi チームでは C# で Blockchain が作れます!
C# でブロックチェーン実装
Upcoming SlideShare
Loading in …5
×

C# でブロックチェーン実装

3,750 views

Published on

2017/3/11 C# ユーザー会 Visual Studio 2017 リリース記念勉強会
https://csugjp.connpass.com/event/50930/

Published in: Software
  • Be the first to comment

C# でブロックチェーン実装

  1. 1. C# でブロックチェーン実装 竹井 悠人 ソフトウェア エンジニア 株式会社 bitFlyer
  2. 2. 免責 このトークは、情報提供のみを目的として行われており、正確性・最新性についての保 障は一切ありません。内容は、会社の見解ではありません。この情報を元にして生じた 不利益について、当社およびスピーカは一切の責任を負いません。 bitFlyer 上での取引についての詳細は、当社カスタマ サポートへお問い合わせくださ い。
  3. 3. 開発に参加する人むけに必要な具材 ● .NET Core SDK 今日使うコードベースは.NET Core 向けに書かれていますゆえ https://www.microsoft.com/net/download/core (.NET Core でググると出てくると思います) ● MinChain リポジトリ 以下のリポジトリのソースコードをネタに解説を進めます https://github.com/yutopio/MinChain プルリク歓迎します ● スライド http://bit.ly/2nfyb7z
  4. 4. 自己紹介 Yuto Takei Software Engineer ここに何か面白いこと書く BTC 送金お待ちしております
  5. 5. 本日の話の構成 ● bitFlyer での C# ● MinChain の構成について ● うごかしてみる
  6. 6. bitFlyer について ● ビットコインの取引所を運営 ● ブロックチェーン関連の研究調査プロダクトの提供 ● 事例紹介 https://blogs.technet.microsoft.com/mpn_japan/2016/ 02/16/partner-showcase-bitflyer/
  7. 7. システム構成 Redis Cache ● 口座画面 / 販売所 ● Lightning ● chainFlyer ● マーケット処理 ● 取引約定 ● バッチ処理 Web Apps Worker Roles SQL Server Web Roles ● fundFlyer ● BTC News ● セッション管理 Storage Queue バックアップへ
  8. 8. クラウドならではのこと 3/8 (水) 夜 (JST) に Azure で障害が起きた際も、 東日本 → 西日本のマイグレーションで2 時間弱ほどで復旧
  9. 9. クラウドならではのこと 3/8 (水) 夜 (JST) に Azure で障害が起きた際も、 東日本 → 西日本のマイグレーションで2 時間弱ほどで復旧
  10. 10. bitFlyer からのトランザクションの流れ bitFlyer で作られた トランザクション Bitcoin Core (bitcoind) クライアント おそとの 世界
  11. 11. すぐに .NET Core に行けるの? YES!!
  12. 12. 暗号面での強い味方 ● Bouncy Castle PCL https://www.nuget.org/packages/Portable.BouncyCastle/ System.Security.Cryptography 名前空間下の実装を行う強い味方 ● たとえば Bitcoin でアドレス生成に使うハッシュ関数 .NET Fx : System.Security.Cryptography.RIPEMD160 .NET Core : なし BC PCL : Org.BouncyCastle.Crypto.Digests.RipeMD160Digest
  13. 13. I Can Has .NET Core .NET Core へ移行可能か 調べることができる https://icanhasdot.net/
  14. 14. MinChain について
  15. 15. 全体の機能相関図 Executor Mining KeyGenerator Config Genesis ツール群 InventoryManagerConnectionManager 解釈前のブロック保持 Memory Pool 保持 InventoryMessage 処理 Executor ブロック通知 Listener 新規接続待ち受け Peer 一覧を保持 特定ピアへの送信 ブロードキャスト Message 受信コールバック 実行済みブロック保持 UTXO の追跡 未実行ブロック一覧保持 ブロック適用/ 取消 Runner 各モジュールの 初期化 / 終了 Program エントリ ポイント コマンド振り分け
  16. 16. GitHub においてあります https://github.com/yutopio/MinChain MIT ライセンスなので、煮るなり焼くなり、プルリク送るなりしてください
  17. 17. 動かしてみましょう
  18. 18. ビルドする .NET Core SDK が必要です https://www.microsoft.com/net/download/core VS2017 ユーザは .NET Core tools を入れれば VS からビルドできるようになります
  19. 19. ビルドする $ dotnet restore (依存する Nuget パッケージの取得) Restoring packages for D:MinChainMinChainMinChain.csproj... Generating MSBuild file D:MinChainMinChainobjMinChain.csproj.nuget.g.props. Generating MSBuild file D:MinChainMinChainobjMinChain.csproj.nuget.g.targets. Writing lock file to disk. Path: D:MinChainMinChainobjproject.assets.json Restore completed in 946.64 ms for D:MinChainMinChainMinChain.csproj. NuGet Config files used: C:UsersyutoAppDataRoamingNuGetNuGet.Config C:Program Files (x86)NuGetConfigMicrosoft.VisualStudio.Offline.config Feeds used: https://api.nuget.org/v3/index.json C:Program Files (x86)Microsoft SDKsNuGetPackages
  20. 20. ビルドする $ dotnet build (ビルドする) Microsoft (R) Build Engine version 15.1.548.43366 Copyright (C) Microsoft Corporation. All rights reserved. MinChain -> D:MinChainMinChainbinDebugnetcoreapp1.0MinChain.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.00
  21. 21. 鍵を生成する ビルドしたバイナリがいるディレクトリに移動して実行 $ dotnet MinChain.dll genkey > key.json (自分のアドレス用の口座を作成する) $ cat key.json { "pub": "WAAAAAEAAAAQAAAANAAAACAAAAAEj0MOwNeLA9b4gXYbURcyF5c8YPtZekJcliWafKduNy AAAAACMFgRiBxSiu3wB3/g3biz9UN8zvNGI2n/HIg88EVn8A==", "prv": "D4TuwVREhf5T3GTs4Y1psaUoHHKy3hb4gllunB2x5l8=", "addr": "MDyDMxi1ynxe1206ANBRXWOjP7o/IeQHakRDilyYrtI=" }
  22. 22. Genesis ブロックを作る (自分のチェーンを作る場合。今回は行いません!) $ dotnet MinChain.dll genesis key.json genesis.bin Creating new genesis block. { "id": "00011702146098209132fa4990686f41f3e6b9859c607c1e5c93c0204ff9d8ec", "prev": "0000000000000000000000000000000000000000000000000000000000000000", "difficulty": 2E-05, "nonce": 2538555750346862341, "timestamp": "2017-03-10T09:20:20.2375851Z", "root": "DS5gHGHSJh0f5qmxgk2PDuI6a7J4LZ7pfy3K6JorH8U=", "height": 0, "txs": [ { "id": "e44e859fe93bf48652b2dfc2386d987e544940f768379779da631fcd7206ac66", "timestamp": "2017-03-10T09:20:19.5205851Z", "in": [], "out": [ { "to": "303c833318b5ca7c5ed76d3a00d0515d63a33fba3f21e4076a44438a5c98aed2", "val": 1000000 } ... (略) key.json 記載のアドレスに マイニング報酬を送るような 原始ブロックを作成し genesis.bin に保存する マイニングするので 少し時間かかる
  23. 23. config を作成する (デフォルト config を生成できる。今回は行いません!) $ dotnet MinChain.dll config > config.json $ cat config.json { "listen": "0.0.0.0:9333", "peers": [ "127.0.0.1:9333" ], "keypair": "<YOUR OWN KEYPAIR>.json", "genesis": "<GENESIS BLOCK>.bin" } 前のステップで生成した 鍵ペアファイル (key.json) と 原始ブロック (genesis.bin) とに それぞれ、ファイル名を変える
  24. 24. 起動する $ dotnet MinChain.dll run config.json うまくいけば、本日のデモ用のサーバにつながり、 マイニングが始まります! … どきどき
  25. 25. まとめ
  26. 26. Blockchain by C# ● やっと安定したマルチ プラットフォーム対応! ○ 暗号系ライブラリなども揃っている ○ ソースが見える安心感 ○ Bitcoin Core などとの高い運用性 ● ブロックチェーンの実装が C# + .NET Core でできた! ○ 基本的なところはほぼ外部依存なし ○ Azure にデプロイして、Mac および Linux でも動きました! ● エンジニア募集中
  27. 27. 一緒にブロックチェーンを紡ぎましょう Miyabi チームでは C# で Blockchain が作れます!

×