Develop with pleasure!

福岡でCloudとかBlockchainとか。

BIP

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

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

リモートピアの生存確認とレイテンシーの計測を可能にするBIP-031

2012年5月にリリースされたBitcoin Core 0.6.1から導入されたPeer Serviceレイヤーの拡張で、リモートピアの生存確認と、レイテンシーの測定を可能にするBIP-031↓ bips/bip-0031.mediawiki at master · bitcoin/bips · GitHub 簡単に言うとよくあるping送っ…

ProtocolのバージョンとUser Agentを分離したBIP-014

作られたのは2011年とだいぶ前のBIPだけど、あまりPeer ServiceレイヤーのBIPを見てなかったので見てみる。 昔はプロトコルのバージョンとクライアントのバージョンが同じだったのね。 bips/bip-0014.mediawiki at master · bitcoin/bips · GitHub 動機 Bitc…

署名に厳密なDERエンコーディングを適用したBIP-066

techmedia-think.hatenablog.com でECDSAの署名データの改竄に遭遇したのもあり、関連して現在のBitcoinプロトコルに適用されている署名のエンコーディングルールについて定義したBIP-066の内容もおさえておく。 bips/bip-0066.mediawiki at master · bitcoi…

BIPとして登録されたHTLC(BIP-199)

HTLCの仕様がBIPとして登録されてたので見てみる↓ bips/bip-0199.mediawiki at master · bitcoin/bips · GitHub 概要 Hashed Time-Locked Contract (HTLC) は、あるユーザー間(売り手と買い手)の決済を行うコントラクトで、売り手がハッシュのプリイメージ…

BIPについて定義したBIP-002

BIPについて定義していたBIP-001が、2016年11月にBIP-002にリプレースされてたので見とく↓ bips/bip-0002.mediawiki at master · bitcoin/bips · GitHub 概要 BIPはBitcoin Improvement Proposalの略で、Bitcoinコミュニティに情報提供したり、Bitcoinの新し…

決定性辞書式順序ソートによるトランザクションの入出力のソート(BIP-69)

Lightning Networkの仕様の中でトランザクションの入出力のソートについてBIP-69が参照されていたので、どんな仕様なのか見てみる。 bips/bip-0069.mediawiki at master · bitcoin/bips · GitHub 要約 現在、トランザクションの入力と出力の順序について、Bi…

HDウォレット(BIP-32)

長編のBIPで斜め読みしてたので、ちゃんと読んでみる。 bips/bip-0032.mediawiki at master · bitcoin/bips · GitHub 概要 このBIPでは階層的決定性ウォレット(HDウォレット)について説明する。 この仕様では、異なるクライアント間で交換可能な決定性ウォ…

マルチシグ検証の際のmalleabilityを解消するNULLDUMMYルール(BIP-147)

Segwitと一緒にデプロイされるBIP-147を見てみる。 bips/bip-0147.mediawiki at master · bitcoin/bips · GitHub このBIPでは、OP_CHECKMULTISIGやOP_CHECKMULTISIGVERIFYで使われる余計なスタック要素を使ったmalleabilityを解消するため、Bitcoinのトラン…

マークル化抽象構文木(BIP-114)

Segwitで導入されたwitness programを使った拡張で、マークル化抽象構文木 = Merkelized Abstract Syntax Trees(MAST)という仕組みがBIP-114として定義されている。 bips/bip-0114.mediawiki at master · bitcoin/bips · GitHub 多数の異なる条件を持つBit…

Bitcoin支払いのURIスキーム(BIP-21)

Mastering Bitcoinの2章でカフェのレジでBitcoinを使った支払いをする際に生成されていたQRコードがBIP-21の仕様で作られているみたいなので、BIP-21の内容を見てみる。 bips/bip-0021.mediawiki at master · bitcoin/bips · GitHub BIP-21は、Webサイト上…

Segwitにおける新しいメッセージとシリアライズフォーマットの仕様(BIP-144)

segwitに対応したトランザクション及びブロックを伝搬させる際の新しいメッセージやシリアライズフォーマットについて定義したBIP-144を見てみる。 bips/bip-0144.mediawiki at master · bitcoin/bips · GitHub 動機 BIP-141でsegwitのコンセンサスが定義さ…

version 0 のwitness programで導入される新しい署名検証の仕組み(BIP-143)

Segwitのデプロイも近づいてきたので、version 0のwitness programにおける署名の検証のための新しいトランザクションのダイジェストアルゴリズムについて定義するBIP-143について調べてみる。 bips/bip-0143.mediawiki at master · bitcoin/bips · GitHub …

Block受信時に重複したトランザクションの受信を抑制するCompact Block(BIP-152)

BIPに登場してからマージ&デプロイまで結構なスピード感で導入されたBIP-152。 フルノードでは、ブロードキャストされたトランザクションの受信と、マイニングされたブロック受信時にブロック内に含まれるトランザクションとで、同じトランザクションの情報…

version bitsを利用したソフトフォークのデプロイに対するマイナーの対応とISMによるソフトフォークとの違い

BIP-9として定義されているBitcoinのソフトフォークのデプロイメントプロセス techmedia-think.hatenablog.com に関して、Bitcoin Coreのブログにマイナー向けのQ&Aが掲載されて具体例を交えてマイナーがどう対応すればいいのか記載されてたので見てみる。 B…

Bitcoinネットワークのピア間の通信の暗号化(BIP-151)

Bitcoinネットワークのピア間の通信を暗号化するBIP-151の提案が出てたので見てみる。 bips/bip-0151.mediawiki at master · bitcoin/bips · GitHub 動機 Bitcoinネットワークでは現在ピア間の通信を暗号化していないため、(トラフィックの操作のような)セ…

relative lock-timeをスクリプトで検証するOP_CSV(BIP-112)

BIP-112にはCHECKSEQUENCEVERIFYという命令コードが定義されており、BIP-68と組み合わせることで、出力の年齢に基づいた制限を加えることができるようになる。bips/bip-0112.mediawiki at master · bitcoin/bips · GitHub 概要 CHECKSEQUENCEVERIFYは既存のN…

複数のソフトフォークの並行デプロイを可能にするversion bits(BIP-9)

先日Bitcoin Coreの0.12.1がリリースされた。 Bitcoin Core :: Bitcoin Core 0.12.1 Released! このリリースでBIP-68、BIP-112、BIP-113のソフトフォークがリリースされることになったが、このソフトフォークのリリースで初めてversion bitsを利用したデプロ…

ブロックのバージョンをアップグレードする際のルール(BIP-34)

BIP-9のversion bitsを読んでるとBIP-34が関連してたのでまずはこっちを見てみる。 bips/bip-0034.mediawiki at master · bitcoin/bips · GitHub Bitcoinのブロックやトランザクションはバイナリ構造をバージョン管理されていて、現在のバージョン(このBIP…

ロックタイムの比較の際に使われるMedian time-past(BIP-113)

BIP-68のRelative lock-time等である一定期間ロックされたトランザクションをブロックに入れていいか判断する際の考え方を再定義するのがBIP-113になる。 https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki 動機 現状、現在の時刻もしくはブ…

CHECKLOCKTIMEVERIFY使った有効期限付きトランザクション(BIP-65)

BIP-65で定義されているOP_CHECKLOCKTIMEVERIFYは、トランザクションの出力を将来のある時点までunspendableのままにする(要は指定された時間まで使えないUTXO)命令コードについて定義している。 bips/bip-0065.mediawiki at master · bitcoin/bips · GitH…

シーケンス番号を使ったRelative lock-timeについて(BIP-68)

BitcoinのトランザクションにはnLockTimeというパラメータがあり、nLockTimeで指定した時刻が過ぎるまではそのトランザクションはブロックに入れられないよう制限ができる。nLockTimeはトランザクションに1つしか設定できないけど、このnLockTimeを相対的に…

Opt-in Replace-by-Feeによるトランザクションの置換(BIP-125)

Bitcoinをやりとりする際にネックになるのが、ブロードキャストしたトランザクションがブロックに入るまでの待ち時間。通常、10分くらいすれば入るのだけど、トランザクションの優先度によっては、いつまで経ってもなかなかブロック入らないケースもある。…

Segwitのアドレスフォーマット(BIP-142)

Segregated WitnessのアドレスフォーマットについてBIP-142に定義されてるので見てみる。 bips/bip-0142.mediawiki at master · bitcoin/bips · GitHub 仕様 新しく定義されたBitcoinアドレスは、BIP-141のSegregated Witnessで定義されているPay-to-Witness…

Segregated Witnessの仕様(BIP-141)

Bitcoinのスケーラビリティの問題への対応の1つとして、トランザクションの情報から署名(Witness)を分離(Segregate)する”Segregated Witness”という提案がされており、この導入によりトランザクション容量の削減が期待されている。 実際に”Segregated W…

BIP-37 Connection Bloom filtering(訳)

Bitcoinのフルノードは、Blockchainの全情報を保持するため、そのデータ量は50GB以上になる。サーバ等であればまぁ問題になるようなレベルの量ではないけど、スマホやIoTデバイスといったリソースにはそれだけの量のデータを保存することはできない。そのた…

BIP-13 Address Format for pay-to-script-hash (訳)

P2SH(pay to script hash)のアドレスフォーマットを定義した仕様BIP-13についてざっと意訳。bips/bip-0013.mediawiki at master · bitcoin/bips · GitHub 概要 このBIPでは、任意の複雑なトランザクションをサポートするためのアドレスについて説明する。…

BIP-16 Pay to Script Hash(訳)

Bitcoinの支払いで一般的なのは送金相手の公開鍵に対して支払いを行うPay to PublicKey Hash=P2KH。これに対し、公開鍵の代わりにスクリプトを用いるのがPay to Script Hash=P2SH。bips/bip-0016.mediawiki at master · bitcoin/bips · GitHubBIP-16で定義…

BIP-70 Payment Protocol(訳)

Open Assets Extensions to Payment Requestsの仕様(訳) - Develop with pleasure!techmedia-think.hatenablog.comで書いた、Open Assets Extensions to Payment RequestsのベースとなってるBIP-70がどんな仕様なのかざっと訳してみる。(BIP=Bitcoin Imp…