Develop with pleasure!

福岡でCloudとかBlockchainとか。

BIP

Compact Block Filter(BIP-158)をRubyで実装してみた

Bitcoinの軽量クライアント向けに自身に関連するトランザクションを判別する仕組みとしては、Bloom Filterを利用するBIP-37がベースだが、軽量ノード側のプライバシーの改善とフルノードの負荷を軽減するためCompact Block Filterという新しい仕組みが提案さ…

送信者−受信者間で簡単なコインジョインを行うBustapayプロトコルを定義したBIP-79

Bitcoinのトランザクションはインプットに送信者のUTXOが、アウトプットに受信者のアドレスと送信者のお釣りがセットされる構成が一般的。ブロックチェーンの分析をする企業でよく採られるアプローチでは、こういうトランザクションの場合、インプットのUTXO…

Stratum protocol extensionsについて定義したBIP-310

Stratumはプールマイニングをサポートするマイニングプロトコルだが、その拡張の利用については長らく正式な規格を記述するBIPが無かったが、それをBIPとして定義したのがBIP-310↓ github.com 基本的には、Stratumサーバーとマイニングソフトウェアが接続さ…

ブロックヘッダのバージョンについてソフトフォークのデプロイ以外の汎用利用を提案するBIP-320

Bitcoinのブロックヘッダにはバージョンを表すnVersionフィールドが存在する。現在このnVersionフィールドは、コンセンサスに影響するような新しい機能をソフトフォークで導入する際に、ソフトフォークの準備ができたことを各マイナーがシグナリングするのに…

Bitcoinのトランザクション伝播時の匿名性を強化するDandelionについて定義したBIP-156

Bitcoin Coreなどのノードがトランザクションをリレーする際、ノードは接続中のピアに対して一斉にトランザクションを送信する訳ではなく、接続中の各ピア毎に指数関数的な遅延時間をもって各ピアにトランザクションを送信するようになっている。これにより…

再利用可能なペイメントコードを使った二者間の決済アドレスの導出方法を定義したBIP-47

BIP-47の記事無いですよね?と突っ込まれたので書いてみた。 (結構前に書かれたBIPでメジャーでないものとか導入されなかったコンセンサスのBIPについては書けてない。今BIPとして登録されてるのが115個くらいで、ブログに投稿したのは、そのうち50個くらい…

秘密鍵が対応するBitcoinアドレスの種類を指定する拡張WIFフォーマットを定義したBIP-178

Bitcoinアドレスは秘密鍵から計算した公開鍵を使って生成されるが、そのアドレスの種類は複数(P2PKH、P2WPKH、P2SHでネストしたP2WPKH)ある。いずれも同じ秘密鍵から生成可能なアドレスだが、実際にウォレットで使ってるアドレスはそのうちのどれか1つ。た…

新しいSIGHASHフラグ「SIGHASH_NOINPUT」を定義したBIP-118

現在BitcoinにはSIGHASH_ALL、SIGHASH_SINGLE、SIGHASH_NONEの3つにSIGHASH_ANYONECANPAYを組み合わせた系6バターンのSIGHASHの組み合わせがあるが↓ techmedia-think.hatenablog.com これにSIGHASH_NOINPUTという新しいSIGHASHフラグを追加しようというBIP-…

BIP-70のPayment Protocolの検証環境を作ってみた

Bitcoinを決済に利用する際に、決済先との間の中間者攻撃やマルウェアなどに感染した環境で、本当の支払先でないアドレスに送金するといったことが起きないよう、送金先をPKIを使って検証する仕組みがBIP-70で定義されているPayment Protocol↓ techmedia-thi…

軽量クライアント向けのCompact Block Filterを定義したBIP-158

techmedia-think.hatenablog.com で使用するフィルタの仕様を定義したのがBIP-158↓ https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki おおまかな仕組みとしては、 BIP-37では軽量クライアント側が自身に関連する公開鍵ハッシュやOutPointな…

クライアントサイドでブロックのフィルタリングを行う軽量クライアント向けのプロトコル BIP-157

現在のSPVノードの実装は接続先のフルノードとのコネクションにBloom Filterをセットして自身に関連するトランザクションをフィルタリングするBIP-37↓の仕様をベースにしている。 techmedia-think.hatenablog.com このプロトコルでは、フィルタがフルノード…

P2WPKHベースのアカウント導出スキームを定義したBIP-84

HDウォレットでSegwitのアドレスを導出する仕様について、今まではP2SHでネストしたP2WPKHの導出スキームを定義したBIP-49のみだったが↓ techmedia-think.hatenablog.com 今回ネイティブのP2WKHのアドレスをHDウォレットで導出するスキームがBIP-84としてTre…

MASTで選択されたスクリプトを実行するtail-callの仕組みを定義したBIP-117

MASTの機能を実現するのに新しくBIP-98とBIP-116とBIP-117の3種類のBIPが提案されている。 BIP-116はスクリプトの条件分岐をフラットにしてMASTのマークツリーを構成した結果、スクリプトで実際に使用する条件(サブスクリプト)がそのマークルツリー内に含…

MASTを実現するMERKLEBRANCHVERIFYを定義したBIP-116

MAST(マークル化抽象構文木)を実現する新しいアプローチとしてMERKLEBRANCHVERIFY opcodeの導入を提案するBIP-116が公開された↓ https://github.com/bitcoin/bips/blob/master/bip-0116.mediawiki MAST(Merkelized Abstract Syntax Tree)とは? Bitcoin…

Merkle Treeの重複エントリー問題の解消とパフォーマンスを向上するFast Merkle Treeについて定義したBIP-98

Bitcoinのブロックヘッダにはブロックに入っているトランザクションのリストにコミットするため、各トランザクションのTXIDをリーフノードにしたマークルツリーを構築し、そのマークルルートの値が入れられるようになっている。ブロックにどれだけたくさんの…

BIP-32の鍵導出と組み合わせてPay-to-Contractのアドレス導出方法を定義したBIP-175

以前ブログでも記事書いたPay-to-Contractのホワイトペーパー techmedia-think.hatenablog.com のプロトコルがBIPになった↓ https://github.com/bitcoin/bips/blob/master/bip-0175.mediawiki 動機 Bitcoinトランザクションは、二者間で価値を移転する現実世…

部分的に署名されたトランザクション(PSBT)のフォーマットを定義するBIP-174

通常のP2PKHやP2WPKHで決済をする分には特に関係ないが、P2SHベースのマルチシグやコントラクトなどで複数のユーザーによる署名が必要な場合、ユーザー間でトランザクションをやりとりしながら、各自署名を付与し、最終的にブロードキャスト可能なトランザク…

未使用なUTXOかチェックするメッセージを定義したBIP-64

フルノードのUTXOセット内にある出力が存在するかチェックするためのP2Pメッセージを定義したBIP-64についてみてみる↓ https://github.com/bitcoin/bips/blob/master/bip-0064.mediawiki ※ マイクハーンによる提案で、Bitcoin Coreにはservice bitの定義は存…

支払いの証明(Proof of Payment)について定義したBIP-120

Bitcoin決済をしたことを証明する支払いの証明(Proof of Payment)方法について定義しているのがBIP-120↓ https://github.com/bitcoin/bips/blob/master/bip-0120.mediawiki Bitcoinによる支払いが行われたことを条件にサービスなどを提供するケースって結…

P2SHでネストしたP2WPKHベースのアカウント導出スキームを定義したBIP-49

HDウォレットのマルチアカウント機能がBIP-44で定義されているけど↓ techmedia-think.hatenablog.com segwitがアクティベートされたこともあり、これにP2SHでネストされたP2WPKHをサポートしようということでBIP-49が新たに追加されたので見てみる↓ https://…

HDウォレットのマルチアカウント階層を定義したBIP-44

以前BIP-32の階層的決定性ウォレットについて書いたけど↓ techmedia-think.hatenablog.com このHDウォレットの階層を論理的に定義したBIP-44についてみてみる↓ https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki 動機 このBIPで提案している…

ECDSA署名のエンコーディング関連のmalleabilityを解消するルールを追加するBIP-146

Segwitのトランザクションで署名が入力から分離されたことで、署名スクリプトに細工してtxidを変更することはできなくなったけど、witnessに移動した署名データの改変自体は可能。依然として可能なECDSA署名のエンコーディング関連の改変を解消するためにト…

プルーニングピア向けのservice bitを定義したBIP-159

Bitcoinのmainnetのブロックチェーンのデータサイズは現在150GB弱ほどだが、プルーニングモードで動作させると使用済みのTXOを指定サイズ分だけ保持し、古いTXOデータは削除されていくようになり、とても少ないディスクスペースでフルノードを動作させること…

ソフトフォークを確実にアクティベートするBIP-8

2020/07/04追記 その後BIP-8の内容は更新されたので、内容については以下の記事を参照↓ techmedia-think.hatenablog.com 現在、ソフトフォークのアクティベートと方法はBIP-9のversion bitsを使った方法が採用されている↓ techmedia-think.hatenablog.com こ…

Compact Blockバージョン2

BIP-152として定義されているCompact Blockについて以前ブログを書いた↓ techmedia-think.hatenablog.com 簡単にいうと新しいブロックデータを受信する際、既存のblockメッセージを使ってデータを受け取ると、そのメッセージにはブロック内の全トランザクシ…

リプレイ攻撃を防ぐOP_CHECKBLOCKATHEIGHTを定義したBIP-115

EthereumがETHとETCにハードフォークした際に問題となったリプレイ攻撃。 ブロックチェーンでハードフォークが発生すると、ハードフォークの前に持っていた通貨は、分岐した両方のチェーンで有効な状態になる。仮にAコインがハードフォークしてAコイン(元の…

Segwitのアドレスフォーマットを定義したBIP-173

取り下げられたSegwitのアドレスフォーマットを定義したBIP-142↓ techmedia-think.hatenablog.com に変わって、新しい仕様でSegwitのアドレスフォーマットを定義したBIP-173が登録されてたので見てみる↓ bips/bip-0173.mediawiki at master · bitcoin/bips ·…

Standards Track BIPのレイヤーの分類を定義したBIP-123

Standards Track BIPのヘッダの項目の1つにLayerがあるが、このLayerについて定義したのがBIP-123↓ bips/bip-0123.mediawiki at master · bitcoin/bips · GitHub 動機 Bitcoinはさまざまな標準を含むシステムで、そのいくつかは相互運用性を担保するのに必…

メッセージが拒否された理由を明確にするBIP-061

2014年4月にリリースされたBitcoin Core 0.9.0、ネットワークのプロトコルバージョン70002でサポートされたrejectメッセージのBIP↓ bips/bip-0061.mediawiki at master · bitcoin/bips · GitHub リモートピアとメッセージを交換する際、意図する動作になら…

リモートピアのメモリプール内のトランザクション情報を取得できるようにしたBIP-035

2012年の8月に提案されたmempoolメッセージのBIP↓ bips/bip-0035.mediawiki at master · bitcoin/bips · GitHub mempoolメッセージを受け取ったノードはメモリプール内の全トランザクションハッシュを返すようになり、getdataメッセージで取得可能なトランザ…