Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IOST マルチシグを理解する

575f07cb2167fb10b779488b8ecaa2c7?s=47 newsnow
March 27, 2019

IOST マルチシグを理解する

575f07cb2167fb10b779488b8ecaa2c7?s=128

newsnow

March 27, 2019
Tweet

Transcript

  1. 2019/03/27 Blockchain Kyoto #13 「Javascriptで独自トークン作成」

  2. 自己紹介 ARATA(@newsnow) もとはビジネスコンサルタント 超上流から川下り中 現在の本業は「父親」

  3. 「注意喚起」 https://iost.biss.com/ で、IOSTパートナーとして立 候補している「Blockchain Kyoto」は当勉強会とは無 関係です。 パートナー投票される際は、十分にご注意ください。

  4. 前回ご紹介したIOSTですが、 先月、無事にメインネットがローンチされました

  5. 前回のおさらい 高セキュリティ / 高分散 / 超高TPS Javascriptでスマートコントラクト コントラクトはアップデート可能 送金手数料は無料(IOSTではなくiGASを消費) アーキテクチャはよく考えられている

    (PoB / HFFS / 貢献モデル / IVM / MVCC ...) CTOのテリーはすげーイイ奴
  6. 今回の目標 マルチシグを理解する

  7. そのためには 「トランザクション署名」 と 「アカウント管理モデル」 の理解が必要!

  8. 内容 1. Token20 の発行方法 2. Token721 の発行方法 3. トークン発行時の注意点 4.

    トランザクション署名の仕組み 5. アカウント管理モデルの基本 6. マルチシグの作り方
  9. ①Token20 の発行方法

  10. Token20 Tokenコントラクト(token.iost)を利用して発行する いわゆる普通のトークン(e.g. IOST)。ただし、con g次第で制限も可能。 APIは以下の通り create(tokenSymbol, issuer, totalSupply, config);

    issue(tokenSymbol, to, amountStr); transfer(tokenSymbol, from, to, amountStr, memo); transferFreeze(tokenSymbol, from, to, amountStr, unfreezeTime, memo); destroy(tokenSymbol, from, amountStr); balanceOf(tokenSymbol, from); supply(tokenSymbol); totalSupply(tokenSymbol); //(例) iwallet call token.iost issue '["kyotoken", "bckyoto", "1000"]' --account bckyoto
  11. ②Token721 の発行方法

  12. Token721 Token721コントラクト(token721.iost)を利用して発行する メタデータを埋め込むことで固有の価値を生み出す(NFT) APIは以下の通り create(tokenSymbol, issuer, totalSupply); issue(tokenSymbol, to, metaData);

    transfer(tokenSymbol, from, to, tokenID); balanceOf(tokenSymbol, from); ownerOf (tokenSymbol, tokenID); tokenOfOwnerByIndex(tokenSymbol, owner, index); tokenMetadata(tokenSymbol, tokenID); //(例) iwallet call token721.iost create '["kyotonft", "bckyoto", 1000]' --account bckyoto
  13. とても簡単 自分でコントラクトを書く必要もない

  14. Note1 & Note2 (独自トークンを発行してみる)

  15. ③トークン発行時の注意点 (独自コントラクトを作成する場合)

  16. スマコンは、セキュリティやコストの面 で気をつけないといけないことが沢山 ある。

  17. 基本的なポイント コントラクトの中身は公開される 攻撃者の視点で考える 権限に気をつける callWithAuthを乱用しない できるだけ早く失敗させる amountLimitを適切に設定する 独自コントラクトの中から独自トークンを操作しない コントラクトに詰め込みすぎない (API/コントラクト/SDK/RPC/外部PG

    を使い分ける) ショートコードを心がける 使えるjsを把握しておく (※例外的事例は後ほど紹介します)
  18. APIの種類 Blockchain JSON-RPC Contract GRPC SDK (独自) 種類が多いのでややこしい(APIの階層・内外を意識する)

  19. コントラクトの種類 native gas js ram original contract... domainコントラクトでcontractに別名をつけられる(現在はv0.0.0)

  20. callとcallWithAuthの違い 基本的な違いは以下のとおり 要するに誰の権限でコントラクトを実行するのか if len(withAuth) > 0 && withAuth[0] {

    authList := h.ctx.Value("auth_contract_list").(map[string]int) authList[h.ctx.Value("contract_name").(string)] = 1 h.ctx.Set("auth_contract_list", authList) }
  21. ④トランザクション署名の仕組み

  22. トランザクション(データ)がブロックに取り込まれ、ブロックチェーンに記録 されるまでを簡単に整理すると 1. 署名→ブロードキャスト(各自) 2. 検証→ブロードキャスト(node) 3. ブロック生成→ブロードキャスト(witness) トランザクション作成者が関係するのは、「署名→ブロードキャスト」だけ。 ただ、iwalletやSDKを使っていると、この流れを把握しにくい。

  23. 手順 step1: Convert transaction struct to byte array step2: Calculate

    the hash of the byte array with sha3 algorithm step3: Sign the hash with private key step4: Broadcast [参照]Signing a transaction
  24. 見たほうが早い (Demo1:ステップごとの変化を確認してみる)

  25. ⑤アカウント管理モデルの基本

  26. None
  27. [参照]Account Permission System

  28. 見たほうが早い (Demo2:状況を再現してみる)

  29. アイデア次第で柔軟な設計が可能!

  30. ⑥マルチシグ

  31. マルチシグとは マルチシグネチャーの略称で、トランザクションの署名に複数 の秘密鍵を必要とする技術。 一つの秘密鍵で署名を行うシン グルシグに比べセキュリティが高い、秘密鍵紛失時に対応しや すいなどのメリットがある。 また、実行権限を分散させることも できる。

  32. コントラクトに実行条件を設ける 自分しか実行できない 特定の人しか実行できない コントラクトしか実行できない グループ内の人しか実行できない 複数人の署名がないと実行できない

  33. 見たほうが早い (Demo3:コントラクトアップデート)

  34. まとめ ネット勉強会します!