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.

Scdt

75 views

Published on

Blockchain engineer night第5回 投影資料 IBM Researchの取り組みとスマートコントラクト開発ツール

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Scdt

  1. 1. © Copyright IBM Corporation 2018 IBM東京基礎研究所の取り組み スマートコントラクト開発について IBM東京基礎研究所 立石 孝彰
  2. 2. © Copyright IBM Corporation 2018 スマートコントラクト • ブロックチェーンプラットフォーム上で動くプログラム • Hyperledger Fabric*1ではchaincodeと呼ぶ • 契約の自動執行や監視のためのプロトコル • 契約者間の手順や義務の定義 2 契約書 // mycc.go func Invoke(…) { … } プロトコル スマートコントラクト 顧客: 商品を発注する 店舗: 在庫確認後に承認する 店舗: 商品を発送する 配送: 商品を受領する 配送: 商品を配達する 顧客: 商品を受領する 1) Hyperledger FabricはLinux Foundationのプロジェクトです。
  3. 3. © Copyright IBM Corporation 2018 例: 購買契約とプロトコル 3 店舗: 発注を受けたら承諾・拒否の応答を返す。 承諾した場合、発送処理を行う。 発送するまでは注文変更を受け付ける。 配送業者: 商品を受領したら配送しなければならない。 顧客: 数量0の発注は行えない。 商品の配送を受けたら支払いを行う。 契約内容(の要約) プロトコルと条件 シナリオ1: 顧客: 注文する。(数量 > 0) 店舗: 承諾する。 顧客: 再注文する。 店舗: 承諾する。 店舗: 発送する。 配送: 受領する。 配送: 配達する。 顧客: 支払いを行う。(注文金額 == 支払額) シナリオ2: 顧客: 注文する。 店舗: 拒否する。 0回以上の 繰り返し
  4. 4. © Copyright IBM Corporation 2018 スマートコントラクトの開発 4 // mycc.go func Invoke(…) { … } 契約書 スマートコントラクト 顧客: 商品を発注する 店舗: 在庫確認後に承認する 店舗: 商品を発送する 配送: 商品を受領する 配送: 商品を配達する 顧客: 支払いを行う プロトコル 1. 契約者間におけるメッセージ と扱うデータの識別 2. 正しいメッセージ順序の定義 プロトコルに従いコーディング 法律家 エンジニア Blockchain技術者
  5. 5. © Copyright IBM Corporation 2018 デモ 5 Webアプリ func Invoke(…) { } Chaincode SCXML engine KVS read/ write event Brower Node.js server Peer REST proxy 顧客、店舗、配送 業者の活動を記録 顧客、店舗、配送 業者が操作
  6. 6. © Copyright IBM Corporation 2018 6
  7. 7. © Copyright IBM Corporation 2018 デモ: 発注一覧画面 7
  8. 8. © Copyright IBM Corporation 2018 デモ: 発注 8
  9. 9. © Copyright IBM Corporation 2018 デモ: 状態遷移図 9
  10. 10. © Copyright IBM Corporation 2018 スマートコントラクトの再利用 10 // mycc.go func Invoke(…) { … } 契約書(海外用) スマートコントラクト 顧客: 商品を発注する 店舗: 在庫確認後に承認する 店舗: 商品を発送する 配送: 商品を受領する 配送: 税関通過する 配送: 商品を納品する 顧客: 支払いを行う プロトコル 国内配送条件 + 海外配送条件 // mycc.go func Invoke(…) { … (配送処理に対応 するコード) } 契約書(国内用) スマートコントラクト 顧客: 商品を発注する 店舗: 在庫確認後に承認する 店舗: 商品を発送する 配送: 商品を受領する 配送: 商品を納品する 顧客: 支払いを行う プロトコル 国内配送条件 再利用 どこを修正する? 修正して影響ない? バグ修正した。 不足条件追加した。
  11. 11. © Copyright IBM Corporation 2018 スマートコントラクトテンプレートによる自動化 • 可変項目(値や条件)をパラメータとした契約書とスマートコントラクト • 契約条件の大枠は同じ • 細かい部分が異なる • 契約書テンプレートを埋めて実行可能なスマートコントラクトを生成 • 可変条件が自動的にプログラム化できれば全自動化は容易 11 // mycc.go func Invoke(…) { … [ 配送処理に対応 するコード ] } 契約書テンプレート スマートコントラクト のテンプレート 顧客: 商品を発注する 店舗: 在庫確認後に承認する 店舗: 商品を発送する [ 配送用プロトコル ] 顧客: 支払いを行う プロトコルのテンプレート [ 配送条件 ]
  12. 12. © Copyright IBM Corporation 2018 Smart Contract Development Tools (SCDT) • テンプレートに基づく契約書からスマートコントラクトを自動生成 • プロトコル定義(動作仕様)にStatechartとDSL4SCを利用 • 形式仕様(DSL4SC)を用いることによって正しい動作を保証 • 3つの変換器から構成され、それぞれ独立に利用可能 • 汎用の監視・制御用クライアント • アセット毎の状態確認と制御 12 契約書 Statechart (SCXML*1) DSL4SC Rules protocol (day_close; day_open)* property … on day_open do { … } Chaincode (Go) // mycc.go func Invoke(…) { … } SCXML Live Viewer state event SCT rule2scxml scxmlcc プロトコル定義 *1) SCXML = State Chart XML (W3C標準)
  13. 13. © Copyright IBM Corporation 2018 SCT (Smart Contract Template) • ANTLR4とEJS(JSテンプレート)の組み合わせ • ANTLR4によって契約書中の文章を構文解析 • EJSによって構文解析結果を用いてDSL4SCルールを生成 13 <% var paymentCondition = translate(xpath.select( '//value_PCond', document)[0]); %> on pay when { <%- paymentCondition %> } do { ... }; 商品の配送を受けたら支払いを行う。 ( [支払い金額は商品代金と同じとする。]) <contract> <placeholder name=“PCond”> <value_PCond> <proposition> <object>支払い代金</object> <predicate>同じ</predicate> <object>商品代金</object> </proposition> </value_PCond></placeholder>… on pay when { _data.amount == _event.data.amount } do { ... }; 契約書テンプレート DSL4SCテンプレート(EJS) 構文解析 document にバインド DSL4SCルール 生成
  14. 14. © Copyright IBM Corporation 2018 DSL4SC • 正規表現: プロトコル(イベント列のパターン)の記述 • 選択 “+”, 連接 “;” , 繰り返し “*” によりパターンを記述 • LDL式*1: 状態列に対する制約を記述 • canOrder: 注文可能状態 • ordered: 注文済状態 14 店舗: 発注を受けたら承諾・拒否の応答を返す。 承諾した場合、発送処理を行う。 発送するまでは注文変更を受け付ける。 注文後は再注文できない。 … protocol (order; accept; ...) + ;; property canOrder // 初期状態 & [{true}*;{ordered}] !canOrder & ... ;; rule on order when canOrder { ... }// 事前状態 & 条件 do ordered { ... } // 事後状態 & アクション ... *1) LDL = Linear Dynamic Logic 状態とイベント イベントパターンの定義 状態列の性質
  15. 15. © Copyright IBM Corporation 2018 例: DSL4SCによるプロトコル定義 15 protocol order; accept; (order; accept)*; ship; receive; deliver; pay + order; reject;; rule on order when { _event.data.quantity > 0 } do { _data.item = _event.data.item; _data.quantity = _event.data.quantity; _data.amount = _event.data.amount; _data.orderDate = _event.data.date; }; … on pay when { _data.amount == _event.data.amount } do { ... }; DSL4SC rule プロトコルと条件 シナリオ1: 顧客: 注文する。(数量 > 0) 店舗: 承諾する。 顧客: 再注文する。 店舗: 承諾する。 店舗: 発送する。 配送: 受領する。 配送: 配達する。 顧客: 支払いを行う。(注文金額 == 支払額) シナリオ2: 顧客: 注文する。 店舗: 拒否する。 0回以上の 繰り返し
  16. 16. © Copyright IBM Corporation 2018 DSL4SC (LDLについて) • 契約(義務)に対応するように性質を記述 • 手続きではなく「常に」「いつかは」という時間に関する性質を記述可能 • 「どんな場合でもいつかはAの状態になる」 [{true}*] <{true}*> A • 「Aの後にBの状態になる」  < {true}*; A > B • 「Aの後は常にBの状態になる」  [ {true}*; A ] B 16 店舗: 発注を受けたら承諾・拒否の応答を返す。 承諾した場合、発送処理を行う。 発送するまでは注文変更を受け付けても良い。 注文後は再注文できない。 … protocol ...;; property canOrder // 初期状態 & [{true}*;{ordered}] !canOrder & ... ;; rule on order when canOrder // 事前状態 do ordered { ... } // 事後状態 ... *1) LDL = Linear Dynamic Logic
  17. 17. © Copyright IBM Corporation 2018 DSL4SCからStatechartへの変換例 17 protocol order; accept; (order; accept)*; ship; receive; deliver; pay + order; reject;; rule on order when { _event.data.quantity > 0 } do { _data.item = _event.data.item; _data.quantity = _event.data.quantity; _data.amount = _event.data.amount; _data.orderDate = _event.data.date; }; … on pay when { _data.amount == _event.data.amount } do { ... }; DSL4SC rule Statechart
  18. 18. © Copyright IBM Corporation 2018 Scxmlcc & CCFlow • CCFlow: 状態遷移機械を実装したGoパッケージ • 条件/アクションの実行のためにOttoパッケージ(JSインタプリタ)を利用 • 条件/アクションとしてGoの関数も利用可能 • Chaincode中で利用されることを想定 (単独でも利用可能) • scxmlcc: CCFlowを利用するchaincodeの生成器 • 生成したファイルはそのままchaincodeとしてデプロイ可能 • SCXMLのサブセットをサポート 18 SCXML <scxml> … </scxml> scxmlcc CCFlow Statechart definition Chaincode Otto
  19. 19. © Copyright IBM Corporation 2018 Scxmlccで生成されたchaincodeの動作 19 Client Main I/F Ledger Main I/F SCXML Invoke(…) “order” transaction “order” event Update the state & Store the state into KVS Record the transaction Peer Chaincode • イベントによる状態遷移 • 現在状態(と属性値)の取得 • Statechartインスタンスの 操作(作成,削除など)
  20. 20. © Copyright IBM Corporation 2018 Statechart (SCXML) • Statechartはシステムの動作を定義するモデル • 階層化、平行状態を用いて複雑な動作を簡潔に記述 • SCXMLはStatechartのXML表現のW3C標準 • オープンソースのSCXMLエディタ/ツールを利用可能 • 例: https://github.com/fmorbini/scxmlgui 20 Derivative Bond issuing
  21. 21. © Copyright IBM Corporation 2018 Statechartのテスト • CCFlowを用いてローカル環境(コマンドライン)で実行 • デプロイする前にStatechartとしてのバグを発見 21 … ["day_close”, {"price": 90}] ["day_open"] … … true {"State":“4","Subflows":{}} {"bought_shares":2,"cur_date":0, "spot_price":90} true {"State":“2","Subflows":{}} {"bought_shares":2,"cur_date":1, "spot_price":90} … $ scxmlrun -t trace.txt -f events.txt purchase.scxml events.txt trace.txt purchase.scxml
  22. 22. © Copyright IBM Corporation 2018 参考情報 • ldltools: https://github.com/ldltools • ldlsatとdsl4sc(rules2scxml)を提供 • Blockchainとは独立したLDLおよびSCXMLのためのツール • DSL4SCにおける形式検証ツールも提供 • scdtools: https://github.com/scdtools • ccflow(scxmlcc, scxmlrun)とデモのためのDocker環境を提供予定 22

×