Open shohu opened 5 years ago
以下 https://techmedia-think.hatenablog.com/entry/2017/12/01/192732 より抜粋
このopcodeはトランザクションではなくスタック上のデータに対してOP_CHECKSIGVERIFYを行う。具体的には
1. スタックからトップ3アイテム(公開鍵ハッシュ、署名、任意のデータ)をポップする。
2. 署名が任意のデータに対する有効な署名か検証する。
3. 署名の公開鍵のハッシュが公開鍵ハッシュと一致するか検証する。
通常のP2PKHの場合のScript
[OUTPUT] scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
[INPUT] scriptSig: <sig> <pubKey>
つなげると ↓
<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
これを OP_DATASIGVERIFY 使った形に直すといかになる?
<sig> <pubKey> <oracleData> <oracleSign> <オラクルの公開鍵ハッシュ> OP_DATASIGVERIFY OP_CHECKSIG
inputとoutputに分けると
[OUTPUT] scriptPubKey: <oracleData> <oracleSign> <オラクルの公開鍵ハッシュ> OP_DATASIGVERIFY OP_CHECKSIG
[INPUT] scriptSig: <sig> <pubKey>
スタック内容の内訳
オラクルの公開鍵ハッシュ
オラクルの署名
オラクルのデータ
勝者の公開鍵 (標準のP2PKHの場合)
勝者のトランザクションの署名 (標準のP2PKHの場合)
Motivation
https://twitter.com/techmedia_think/status/1043155228290416640?s=19
Explain
https://techmedia-think.hatenablog.com/entry/2017/12/01/192732
Reference implementation
https://github.com/BitcoinUnlimited/BitcoinUnlimited/commit/1bf53307cab5d96076721ef5a238a63b03aca07d