Slide 1

Slide 1 text

ブロックチェーンを利⽤した サービス開発について GMOインターネット株式会社 次世代システム研究室

Slide 2

Slide 2 text

ブロックチェーンを利⽤した サービス開発について GMOインターネット株式会社 次世代システム研究室 スマートコントラクト - 事実を証明できるプログラム -

Slide 3

Slide 3 text

1. ブロックチェーンとは 2. スマートコントラクトとは 3. 開発中サービスの紹介 4. スマートコントラクトの問題点と解決法

Slide 4

Slide 4 text

• ビットコインの利⽤箇所の増加 • ビットコインはブロックチェーン実装の ひとつ • 改ざんが難しい • 耐障害性

Slide 5

Slide 5 text

• トランザクション (Tx):記録されるメッセージ • ブロック:一定期間のトランザクション集合 • ハッシュ:ひとつ前のブロックのハッシュ値 Tx Tx Tx ハッシュ ブロック 5

Slide 6

Slide 6 text

• Tx を変更するとブロックのハッシュ値が変更 • ハッシュの計算は数⼗秒程度かかる Tx Tx Tx ハッシュ 6 ブロック

Slide 7

Slide 7 text

• ハッシュ が変更するとブロックのハッシュ値が変更 • 先端までのすべてのブロックを変更するのは難しい ⇒過去の改ざんが難しい Tx Tx Tx ハッシュ 7 ブロック

Slide 8

Slide 8 text

• 全ノードが全データを持っている ⇒サービスがダウンしにくい 8

Slide 9

Slide 9 text

• 改ざんされたくないデータを記述 • 作成者のサイン – 確かに、その人が作成したことを証明 AさんがBさんへ100円渡す Tx 9 A

Slide 10

Slide 10 text

Tx AさんがBさんへ100円渡す Tx Tx BさんがCさんへ2,000円渡す CさんがAさんへ1,000円渡す A B C 10

Slide 11

Slide 11 text

Tx Tx Tx 所持⾦ Aさん: 2,500円 Bさん: 1,200円 Cさん: 4,000円 11

Slide 12

Slide 12 text

• ブロックチェーンに書き込むプログラム • トランザクションにコード Tx contract Class { uint variable; function funcA() { variable= 1; } function funcB() constant returns (uint) { return variable; } } Tx Tx Class.funcA()

Slide 13

Slide 13 text

• 2014年に最初のリリース • OSSのブロックチェーンのひとつ – C++ – Go • Solidityによりスマートコントラクトを実装

Slide 14

Slide 14 text

• JavaScript に似た高級言語 • Ethereum で動作するコードにコンパイル可能 • ブラウザIDE がおすすめ – https://ethereum.github.io/browser-solidity/ – JavaScript VM、Ethereum クライアント接続可能

Slide 15

Slide 15 text

contract SimpleStorage { uint storedData; function set(uint x) { storedData = x; } function get() constant returns (uint) { return storedData; } }

Slide 16

Slide 16 text

• データを保存するコントラクト • constant はトランザクションを生成しな い Tx SimpleStorage インスタンスを作成 Tx Tx contract.set(10) contract.set(20) contract.get() = 10

Slide 17

Slide 17 text

contract Coin { address public minter = msg.sender; mapping (address => uint) public balances; function mint(address receiver, uint amount) { if (msg.sender != minter) return; balances[receiver] += amount; } function send(address receiver, uint amount) { if (balances[msg.sender] < amount) return; balances[msg.sender] -= amount; balances[receiver] += amount; } }

Slide 18

Slide 18 text

• 仮想通貨のコントラクト – 発⾏、送⾦ • msg.sender は送信者アドレス • 連想配列でそれぞれの所持⾦を管理

Slide 19

Slide 19 text

• 誰が何をいつしたかを証明できる – すべての記録が残る – 改ざんができない • 応⽤例 – 通貨 • ビットコインなど – “モノ”の所有権 • 近いうちに、、、

Slide 20

Slide 20 text

• ブロックチェーン – 改ざんが難しい可⽤性の高い記録台帳 • スマートコントラクト – 事実を証明 • 誰が、何を、いつ – ブロックチェーンに書き込むプログラム

Slide 21

Slide 21 text

• Node Proxy – Ethereum ノード以外でTx を実⾏ • データストア連携 – 機密データの保管 – ファイルサイズの大きなデータの保存

Slide 22

Slide 22 text

• バージョンアップができない • トランザクション実⾏コストが高い • コストの支払い者がエンドユーザ

Slide 23

Slide 23 text

解決済み • バージョンアップができない • トランザクション実⾏コストが高い • コストの支払い者がエンドユーザ