Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Bitcoin Scriptで作るSmart Contract
Search
shigeyuki azuchi
August 18, 2018
Technology
730
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Bitcoin Scriptで作るSmart Contract
shigeyuki azuchi
August 18, 2018
More Decks by shigeyuki azuchi
See All by shigeyuki azuchi
SLH-DSA (SPHINCS+)
azuchi
0
19
Hyper Tree
azuchi
0
22
FORS
azuchi
0
34
クラスターmempool
azuchi
0
44
W-OTS+
azuchi
0
50
Shorのアルゴリズム
azuchi
0
72
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
58
Fiat-Shamir変換と注意点
azuchi
0
260
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
71
Other Decks in Technology
See All in Technology
AI コーディングと人間の認知スループット / CTO Night & Day 2026 Morning Session / AI Coding and Human Cognitive Throughput
prog893
4
1k
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
1
150
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
330
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.7k
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
AI導入は済んだ。次は統制を作り替える番だ_AI×開発組織 Summit 2026
techtekt
PRO
0
210
今さら理解するウェブフォントver.2026
takanorip
3
770
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
570
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
170
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
Featured
See All Featured
Crafting Experiences
bethany
1
380
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
520
How to make the Groovebox
asonas
2
2.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
For a Future-Friendly Web
brad_frost
184
10k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Transcript
Copyright ©2018 chaintope, Inc. all rights reserved. Bitcoin Hackathon for
Mobile Developers Bitcoin Script で作るSmart Contract 2018/08/18 株式会社 chaintope 安土 茂亨
Copyright ©2018 chaintope, Inc. all rights reserved. 自己紹介 • 株式会社ハウインターナショナル
CTO • 株式会社chaintope CTO • BitcoinプロトコルのRuby実装「bitcoinrb」 • Open Assets ProtocolのRuby実装 「openassets-ruby」 • Bech32のRuby実装「bech32rb」 • 共著 「ブロックチェーン・プログラミング 仮想通貨入門」 • ブログ「Develop with pleasure!」 https://techmedia-think.hatenablog.com/
Copyright ©2018 chaintope, Inc. all rights reserved. HTLCを利用したクロスチェーンAtomic Swap シークレットとタイムロックを利用したAtomic
Swapプロトコル アリスはEthereum上でシークレットAを公開してETHを入手し、 ボブは公開されたAを使ってBTCを入手する。 ※コインを入手する際にスクリプトは公開されブロックチェーンに記録されるため、 HTLCを行ったことは誰もが知ることになる アリスはBitcoinを以下のアンロック条件のスクリプトに送る。 • H(S)のプリイメージ=シークレットSが分かればボブは BTCを入手できる。 • 10日経過したらアリスはBTCを入手できる。 Secret S H(S) ボブはETHを以下のアンロック条件のコントラクトに送る。 • H(S)のプリイメージ=シークレットSが 分かればアリスはETHを入手できる。 • 5日経過したらボブはETHを入手できる。 BTC/ETHを交換
Copyright ©2018 chaintope, Inc. all rights reserved. HTLCを利用したクロスチェーンAtomic Swap •
Bitcoinのスクリプト(BIP-199) • ボブが償還する際の scriptSig • アリスが償還する際の scriptSig ※実際は、P2SHになるのでredeem scriptが追加される。 ※ 安全性のためOP_SIZEを使用したシークレットのサイズチェックを推奨 • Ethereumのコントラクト https://github.com/AltCoinExchange/ethatomicswap/blob/master/contracts/AtomicSwap.sol OP_IF OP_HASH160 <H(S)> OP_EQUALVERIFY OP_DUP OP_HASH160 <ボブの公開鍵のハッシュ> OP_ELSE <ロック期間> OP_CHECKLOCKTIMEVERIFY OP_DROP OP_HASH160 <アリスの公開鍵のハッシュ> OP_ENDIF OP_EQUALVERIFY OP_CHECKSIG <ボブの鍵で生成した署名> <ボブの公開鍵> <s> OP_TRUE <アリスの鍵で生成した署名> <アリスの公開鍵> OP_FALSE scriptPubKey scriptSig scriptSig
Copyright ©2018 chaintope, Inc. all rights reserved. OP_CLTV 【BIP-65】OP_CHECKLOCKTIMEVERIFY(OP_CLTV) https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki
絶対時間(ブロック高、UNIXタイムスタンプ)で、コインをロックするopcode。 <絶対時間> OP_CHECKLOCKTIMEVERIFY Tx version inputs outputs locktime もともと、BitcoinのTxはlocktimeフィールドを持ち、 このフィールドにセットした時刻まではTxをブロードキャスト できない。 OP_CLTVは、スクリプトからこのlocktimeフィールドの値 を チェックすることができるopcode。 スクリプトスタックのアイテムより大きなlocktimeが 指定されている場合、そのTxは無効。 ※ インプットのsequenceの値がMAXの場合、Txのlocktimeは評価されな いので、CLTVでsequenceにMAX値がセットされている場合も無効 Txとな る。
Copyright ©2018 chaintope, Inc. all rights reserved. Relative Locktime と
OP_CSV 【BIP-68】 Relative Locktime https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki トランザクションのインプットのsequenceを使って相対的なタイムロックを実現 【BIP-112】OP_CHECKSEQUENCEVERIFY(OP_CSV) https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki 相対時間(経過ブロック数、経過時間)で、コインをロックするopcode。 <相対時間> OP_CHECKSEQUENCZEVERIFY TxIn outpoint(hash, index) scriptSig sequence 0:ブロック数ベース、 1:時間ベース OP_CSVはスクリプトからsequenceフィールドの値をチェックすることが できるopcode。 インプットにスクリプトスタックのアイテムより大きな sequenceが 指定されている場合、その Txは無効。 ※ OP_CSVを使用するTxのversionは2
Copyright ©2018 chaintope, Inc. all rights reserved. HTLCを使った第三者経由の支払い Secret C
H(C) アリスが作るHTLC Tx Outputs 1 BTCは以下のいずれかで入手可能 •Secret Cがあればボブの鍵で入手可能 •14日経過したらアリスの鍵で入手可能 Inputs アリスの 1 BTC ボブが作るHTLC Tx Outputs 1 BTCは以下のいずれかで入手可能 •Secret Cがあればキャロルの鍵で入手可能 •10日経過したらボブの鍵で入手可能 Inputs ボブの 1 BTC ① キャロルがランダムなシークレットCを生成しそのハッシュをアリスに共有する。 ②アリスはH(C)を使ってボブに条件付きで コインを支払うTxをブロードキャストする。 ③ボブはH(C)を使ってキャロルに条件付きで コインを支払うTxをブロードキャストする。
Copyright ©2018 chaintope, Inc. all rights reserved. HTLCを使った第三者経由の支払い ③ キャロルはボブがブロードキャストした
HTLC Txをインプットにし、シークレット Cと 自分の署名でボブのコインを入手する Txを作成しブロードキャストする。 キャロルが作る償還 Tx Outputs キャロルのアドレスへ 1 BTC Inputs ボブのHTLC TxのUTXO 1BTCを Secret Cとキャロルの署名で入手 ボブが作る償還 Tx Outputs ボブのアドレスへ 1 BTC Inputs アリスのHTLC TxのUTXO 1BTCを Secret Cとボブの署名で入手 Secret C Secret C ④ ボブはキャロルがブロードキャストした TxからシークレットCが 分かるので、これを使ってアリスの HTLC Txのコインを入手する。
Copyright ©2018 chaintope, Inc. all rights reserved. HTLCを使った第三者経由の支払い • キャロルが1
BTCを受け取らないとシークレットCは明らかにならない。 • シークレットCが明らかになれば、ボブはアリスから1 BTCもらえる。 • キャロルがシークレットCを明らかにせず、1 BTCを受け取らなかったら、 ボブは10日待てば自分のコインを取り戻せる。アリスも14日待てば取り戻せる。 • アリス(14日) > ボブ(10日)のタイムロックの関係で、ボブがキャロルにコインを 支払ったが、アリスからコインをもらえないという状況が発生しない仕組みを実現。 OP_CHECKLOCKTIMEVERIFY(OP_CLTV)は このアウトプットのコインを指定時間( block height or unix timestamp)までロックするタイムロックの仕組 み。 OP_HASH160 <H(Secret C)> OP_EQUAL OP_IF <ボブの公開鍵> OP_ELSE <ロック日時> OP_CLTV OP_DROP <アリスの公開鍵 > OP_ENDIF OP_CHECKSIG
Copyright ©2018 chaintope, Inc. all rights reserved. 任意のデータをブロックチェーンに記録することができるopcode 【サイズ上限】 •
Bitcoin: 80 bytes • Bitcoin Cash: 220 bytes OP_RETURNを利用した拡張 OP_RETURN <データ> Colored CoinやProof of Existenceなどでの利用が主流 • OmniLayer (6f6d) • Open Assets Protocol (4f41) • Colu (4343) • Factom (4661) • etc.. https://opreturn.org/ より
Copyright ©2018 chaintope, Inc. all rights reserved. Bitcoin以外の任意のアセットの取引をブロックチェーン上で可能にするプロトコル 各プロトコルでは、OP_RETURNを利用してアセットのメタデータを トランザクションに挿入し、Bitcoin以外の価値の取引を表現する
Colored Coin Transaction version inputs ... outputs Output 1 Marker Output Output 2 Output 3 locktime OP_RETURNのアウトプットにこのトランザクションで 発行 or 送付する各アセットの量や、メタデータを記録。 ※ 拡張プロトコルなので、プロトコルを解釈しないノードやウォレットでは 通常のBitcoinとして扱われる。 Asset Asset フィールド 内容 OAP Marker Open Assets Protocolの出力であることを示すマーカー( 0x4f41) Version Open Assets Protocolのバージョン番号(0x0100) Asset Quantityの数 アセットに使われるアウトプット数 Asset Quantityリスト 各アウトプットに割り当てられるアセットの量 メタデータの長さ メタデータの長さ メタデータ 任意のメタデータ(アセット情報を定義したコンテンツの URIなど) Open Assets Protocolの場合
Copyright ©2018 chaintope, Inc. all rights reserved. 2013年にPeter Toddが作成した、ハッシュの衝突(SHA1、SHA2、RIPEMD-160など)を 発見した人に賞金を送るスクリプト
実際にSHA-1の賞金がロックされたアドレス 37k7toV1Nv4DfmQbmZ8KuZDQCYK9x5KpzP ハッシュの衝突発見に賞金 OP_2DUP OP_EQUAL OP_NOT OP_VERIFY OP_SHA1 OP_SWAP OP_SHA1 OP_EQUAL <プリイメージ1> <プリイメージ2> scriptPubKey scriptSig 値の異なる、ハッシュ値が同じプリイメージを 2つ提供できれば 賞金が手に入る 2017年に実際にSHA-1の衝突を起こすプリイメージを使って賞金が入手される http://chainquery.com/bitcoin-api/getrawtransaction/31206bcaca9dbf57713630a69bc9cc23f8e6420 2e75b439e0d240f22056fda1f/1
Copyright ©2018 chaintope, Inc. all rights reserved. • 18歳条件の場合 P2PKHで孫のアドレスに資金を送る
locktime付きのトランザクションを 作成&署名し、孫に渡す。 孫は18歳の誕生日を迎えるとトランザクションをブロードキャスト可能。 • 自分が亡くなった場合 スクリプトは外部状態を参照できないため、オラクルが必要になる。 オラクルと孫の2-of-2のマルチシグにコインをロックするトランザクションを 作成&署名し、孫に渡す ※ ハッシュのプリイメージはオラクルと共有している条件が記載された評価式 亡くなった場合、孫がトランザクションに自分の署名を付与し、オラクルに評価式と共に渡す。 オラクルはトランザクションの宛先と量、評価式および死亡を確認できたらトランザクションに署名し て返す。孫は2つのトランザクションをブロードキャストすると資産を手に入れることが可能。 オラクルを利用したContract 孫が18歳になるか、自分が亡くなった際に資産を孫に送りたい Transaction version inputs 資産UTXO outputs 孫のアドレス locktime (孫の18歳の誕生日) <hash> OP_DROP 2 <孫の公開鍵> <オラクルの公開鍵> 2 OP_CHECKMULTISIG if (has_died(‘john smith’, born_on=1950/01/02)) return (10.0, 孫のアドレス) scriptPubKey 評価式
Copyright ©2018 chaintope, Inc. all rights reserved. Payment Channel Funding
Tx(on-chain) Inputs アリスの1BTC ボブの1BTC Outputs アリスとボブのマルチシグに 2 BTC Commitment Tx1 (off-chain) Outputs アリスの残高 1 BTC ボブの残高 1BTC Inputs Funding Tx multisig Commitment Tx2 (off-chain) Outputs アリスの残高 0.9 BTC ボブの残高 1.1BTC Inputs Funding Tx multisig Commitment Tx n (off-chain) Outputs アリスの残高 0.4 BTC ボブの残高 1.6 BTC Inputs Funding Tx multisig ・・・ オンチェーンでマルチシグに資金をデポジットし、その資金内で参加者の残高を 更新するトランザクションを作ることで、オフチェーンで高速決済をするプロトコル。
Copyright ©2018 chaintope, Inc. all rights reserved. Payment Channel •
オフチェーン決済のCommitment Txに求められる要件 悪意ある取引相手が自分の残高が多い古いCommitment Txを ブロードキャストできないようにする。 ハッシュとタイムロックを組み合わせて不正を働いた場合のペナルティを導入 具体的な仕組みが知りたい方は、ビットコイナー反省会動画を https://www.youtube.com/watch?v=jtRn6cFVc68 OP_HASH160 <H(Secret B1)> OP_EQUAL OP_IF <アリスの公開鍵> OP_ELSE <1000> OP_CHECKSEQUENCEVERIFY OP_DROP <ボブの公開鍵> OP_ENDIF OP_CHECKSIG