Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
IOST マルチシグを理解する
newsnow
March 27, 2019
Technology
0
170
IOST マルチシグを理解する
newsnow
March 27, 2019
Tweet
Share
More Decks by newsnow
See All by newsnow
newsnow
0
110
newsnow
0
73
newsnow
0
86
newsnow
0
190
newsnow
0
19
Other Decks in Technology
See All in Technology
kappa4
4
2.1k
y0hgi
1
370
opelab
2
290
awsbelaraby
4
1.2k
torisoup
0
270
caori_t
0
150
smzksts
0
210
satoryu
0
2.1k
masakick
0
120
oracle4engineer
1
210
kentaro
1
370
yosuke_matsuura
PRO
0
3.2k
Featured
See All Featured
caitiem20
308
17k
lauravandoore
437
28k
orderedlist
PRO
329
35k
holman
288
130k
philnash
8
490
erikaheidi
13
4.2k
deanohume
295
27k
addyosmani
1348
190k
bermonpainter
342
26k
marktimemedia
6
330
vanstee
116
4.8k
cherdarchuk
71
260k
Transcript
2019/03/27 Blockchain Kyoto #13 「Javascriptで独自トークン作成」
自己紹介 ARATA(@newsnow) もとはビジネスコンサルタント 超上流から川下り中 現在の本業は「父親」
「注意喚起」 https://iost.biss.com/ で、IOSTパートナーとして立 候補している「Blockchain Kyoto」は当勉強会とは無 関係です。 パートナー投票される際は、十分にご注意ください。
前回ご紹介したIOSTですが、 先月、無事にメインネットがローンチされました
前回のおさらい 高セキュリティ / 高分散 / 超高TPS Javascriptでスマートコントラクト コントラクトはアップデート可能 送金手数料は無料(IOSTではなくiGASを消費) アーキテクチャはよく考えられている
(PoB / HFFS / 貢献モデル / IVM / MVCC ...) CTOのテリーはすげーイイ奴
今回の目標 マルチシグを理解する
そのためには 「トランザクション署名」 と 「アカウント管理モデル」 の理解が必要!
内容 1. Token20 の発行方法 2. Token721 の発行方法 3. トークン発行時の注意点 4.
トランザクション署名の仕組み 5. アカウント管理モデルの基本 6. マルチシグの作り方
①Token20 の発行方法
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
②Token721 の発行方法
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
とても簡単 自分でコントラクトを書く必要もない
Note1 & Note2 (独自トークンを発行してみる)
③トークン発行時の注意点 (独自コントラクトを作成する場合)
スマコンは、セキュリティやコストの面 で気をつけないといけないことが沢山 ある。
基本的なポイント コントラクトの中身は公開される 攻撃者の視点で考える 権限に気をつける callWithAuthを乱用しない できるだけ早く失敗させる amountLimitを適切に設定する 独自コントラクトの中から独自トークンを操作しない コントラクトに詰め込みすぎない (API/コントラクト/SDK/RPC/外部PG
を使い分ける) ショートコードを心がける 使えるjsを把握しておく (※例外的事例は後ほど紹介します)
APIの種類 Blockchain JSON-RPC Contract GRPC SDK (独自) 種類が多いのでややこしい(APIの階層・内外を意識する)
コントラクトの種類 native gas js ram original contract... domainコントラクトでcontractに別名をつけられる(現在はv0.0.0)
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) }
④トランザクション署名の仕組み
トランザクション(データ)がブロックに取り込まれ、ブロックチェーンに記録 されるまでを簡単に整理すると 1. 署名→ブロードキャスト(各自) 2. 検証→ブロードキャスト(node) 3. ブロック生成→ブロードキャスト(witness) トランザクション作成者が関係するのは、「署名→ブロードキャスト」だけ。 ただ、iwalletやSDKを使っていると、この流れを把握しにくい。
手順 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
見たほうが早い (Demo1:ステップごとの変化を確認してみる)
⑤アカウント管理モデルの基本
None
[参照]Account Permission System
見たほうが早い (Demo2:状況を再現してみる)
アイデア次第で柔軟な設計が可能!
⑥マルチシグ
マルチシグとは マルチシグネチャーの略称で、トランザクションの署名に複数 の秘密鍵を必要とする技術。 一つの秘密鍵で署名を行うシン グルシグに比べセキュリティが高い、秘密鍵紛失時に対応しや すいなどのメリットがある。 また、実行権限を分散させることも できる。
コントラクトに実行条件を設ける 自分しか実行できない 特定の人しか実行できない コントラクトしか実行できない グループ内の人しか実行できない 複数人の署名がないと実行できない
見たほうが早い (Demo3:コントラクトアップデート)
まとめ ネット勉強会します!