読者です 読者をやめる 読者になる 読者になる

Develop with pleasure!

福岡でCloudとかBlockchainとか。

Bitcoin

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ネットワークでは現在ピア間の通信を暗号化していないため、(トラフィックの操作のような)セ…

CHECKLOCKTIMEVERIFYで指定期間まで資金を凍結

techmedia-think.hatenablog.com ↑のCHECKLOCKTIMEVERIFYを使って、指定した期間まで出力を凍結するトランザクションを作ってみた。 資金凍結をするスクリプト 実際に作成したのは↓のScript <expiry time> CHECKLOCKTIMEVERIFY DROP <pubkey> EQUALVERIFY CHECKSIG expiry timeに</pubkey></expiry>…

トランザクション署名時のSIGHASH

Bitcoinのトランザクションに署名する際の、署名のスコープの仕様について読んでみる。 SIGHASHの種類 https://bitcoin.org/en/developer-guide#signature-hash-types OP_CHECKSIGが各署名から非スタック引数を抽出し評価することで、署名者はトランザクショ…

トランザクションのシリアライズフォーマット仕様

シリアライズされたBitcoinのトランザクションのフォーマット仕様について、いつもライブラリ任せだったのでちゃんと仕様を読む。 https://bitcoin.org/en/developer-reference#raw-transaction-format フォーマット仕様 バイト数 名前 データタイプ 定義 4 …

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を利用したデプロ…

コインベースのフォーマット仕様

Bitcoinではブロックをマイニングするとその報酬が得られるが、この報酬を受け取るトランザクションをコインベーストランザクションと呼ぶ。 通常のBitcoinの取引では入力となるトランザクションは別のトランザクションの出力を参照する形式になるが、コイン…

ブロックのバージョンをアップグレードする際のルール(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分くらいすれば入るのだけど、トランザクションの優先度によっては、いつまで経ってもなかなかブロック入らないケースもある。…

Bitcoin Core 0.12.0の追加機能

先月Bitcoin Coreの0.12.0がリリースされてる。 Bitcoin Core :: Bitcoin Core 0.12.0 Released! 追加機能 署名の検証が7倍高速に Bitcion CoreではOpenSSLを使って楕円曲線暗号の署名の検証をしていたけどこの部分を3年前から作り始めたlibsecp256k1に置き…

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

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

Segwitのテスト環境”segnet”に接続

techmedia-think.hatenablog.com4月に導入が予定されている↑のSegwitのテスト環境であるsegnetが2015年12月末にデプロイされているので、試しに接続してみた。 segnet環境のビルド 現在公開されているBitcoin Coreでは当然ながらsegnetには接続できないので…

Segregated Witnessの仕様(BIP-141)

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

BIP-37 Connection Bloom filtering(訳)

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

Open Assets Protocolのアセットをburn(焼却)する

Open Assets Protocolを利用することで、Blockchain上で任意のアセットの発行・送付が可能になるが、ユースケースとしてアセットの流通の他にアセットの消滅というユースケースも考えられる。Open Assets Protocolをアセットを消滅させるには以下のような方…

MultiChainにおけるネイティブアセット

MultiChainではBitcoinのネットワークと同様のレベルでアセットの発行をサポートしてるみたいなので、ドキュメント読んで見る。Native assets in MultiChain | MultiChain MultiChainのアセット MultiChainはBlockchainレベルでネイティブにアセットをサポー…

複数のアセットを1トランザクションで送付できるようになったopenassets-ruby v0.2.9をリリース

Open Assets Protocolのカラーリングは、order-based coloringという方式を採用しており、トランザクションの入力に色(Asset ID)の異なるアセットが含まれていても、出力で指定されたアドレスにそれぞれ指定した量ずつアセットを送付することができる。複…

Colored Coins ProtocolのAsset IDの算出方法

Asset ID · Colored-Coins/Colored-Coins-Protocol-Specification Wiki · GitHubAsset IDはアセットを一意に識別するイミュータブルなID。Colored Coins ProtocolのAsset IDにはlockedとunlockedという2種類のAsset IDがある。 Unlocked Asset IDs Unlocked…

Colored Coins ProtocolのメタデータのRulesについて

techmedia-think.hatenablog.com で出てきたColored Coins Protocolのメタデータに定義できるRulesについて。Rules · Colored-Coins/Colored-Coins-Protocol-Specification Wiki · GitHub Rules メタデータに定義されているRulesは、Colored Coins Protocol…

Colored Coins ProtocolのメタデータのStatic Dataについて

techmedia-think.hatenablog.comで出てきたColored Coins Protocolのメタデータに定義できるStatic Dataについて。Static Data · Colored-Coins/Colored-Coins-Protocol-Specification Wiki · GitHub Static Data メタデータには静的なデータを含めることが…

Colored Coins Protocolのメタデータのハンドリング方法

techmedia-think.hatenablog.comに続いて、Colored Coins Protocolでのメタデータのハンドリング方法について見てみる。github.comColored Coins Protocolでは任意の色付けされた取引(発行もしくは転送)へメタデータを追加できる。メタデータはプレーンなJ…

dumpprivkeyで取得した秘密鍵から公開鍵を生成

bitcoin-rubyを使ってBitcoin Coreのウォレットで管理している秘密鍵からから公開鍵を作成する手順。 dumpprivkeyの戻り値 最初、Bitcoin Coreのdumpprivkeyコマンドで秘密鍵を入手できるので、その秘密鍵から公開鍵を再作成するだけと思い、bitcoin-rubyを…

Open Assets Payment Method Protocolの仕様(訳)

ちょっと時間が経ったけど、Open Assets Extensions to Payment Requestsにおけるアセットの交渉に関するプロトコルを定義したドキュメントが公開されてたのでざっと訳してみる。github.comざっくり言うと、支払い方法(どんなアセットでどんな量の支払いが…

Bitcoinの匿名性を向上させるConfidential Transactions

Bitcoin単体には個人を表すデータは存在しないけど、アドレス間の送金のやりとりや、取引所を介した現金化などのデータから必ずしも個人が特定できないということは無い。 Bitcoinのアドレスと組織・個人が結びつくと、例えばAという会社はどれくらいの売上…

Colored Coins Protocolのカラーリングの仕組み

Open Assets Protocol含め、通称カラードコインと呼ばれるプロダクトは何種類かあって、それぞれカラーリング(実際にはアセットIDとかで色ではないのでカラードコインという呼称は違和感ある)のプロトコルが決められている。基本的にプロトコルは異なるの…

Open Assets ProtocolのMarker OutputにおけるPUSHDATAのハンドリング方法の仕様変更

ブロックチェーンサミットでNBitcoinの作者NicolasからOpen Assets ProtocolのMarker Outputについて先月仕様の記述が変更されたと聞いたので確認してみた。 変更のコミットが↓github.com 変更前 marker outputはゼロもしくは非ゼロの値を持てる。もし同じト…

Bitcoin Coreのビルド

Bitcoinの公式実装であるBitcoin Core。他のブロックチェーンの実装でもBitcoin Coreをフォークした実装が多く、手軽にオレオレ ブロックチェーンを作るのであればBitcoin Coreをフォークするのがお手軽。ということでBitcoin Coreをソースからビルドしてみ…

Project OtherCoin

microSD内にあるチップを使ってBitcoinのオフトランザクションを実現するOtherCoinについて。ざっくり言うとSDカード内にセキュアに保持された秘密鍵をセーフティに流通させていく(AからBに移ったらAにはその鍵は残らないことを保証する)ことで、Blockchai…

MultiChainにみるPrivate Blokchainを作る際のポイント

BitcoinのBlockchainは公開台帳なわけだけれど、PrivateなBlockchainってどうやって作るんだろう? Bitcoin Coreをフォークして別のポート番号やnamespace変更して起動すればできるのか?と思ったけど、P2Pノードとして分散動作するとPrivateな要件は満たさ…

BlockchainとSidechain間のtwo way pegについて

BlockchainとSidechain間の連携というと、CounterpartyのようにBlockchain上のBitcoinを誰も入手不可能なアドレスに送るProof of Burnにより消失させ、サイドチェーン側に持ってくる one way pegであれば現状のBitcoinのBlockchainでも実現可能。ただこの方…

openassets-ruby

Open Assets ProtocolのRuby版の実装をOSSで公開してます。github.come-ZUKA Tech Night vol.33 - Blockchain & SVM で、そのopenassets-rubyの紹介をしてきました。 Openassets ruby from shigeyuki azuchi

P2SHを使ったBitcoinの送付とOpen Assets Protocolでの利用

Bitcoinを送る際に、相手の公開鍵のハッシュ値を使用するP2PKH(Pay to Public Key Hash)に対して、Scriptのハッシュ値を利用するP2SH(Pay to Script Hash)。 P2SHを使ったBitcoin送付の仕組み P2SHの仕組みは↓を参考に紐解いてく。 https://bitcoin.org/…

Bitcoin Coreのデータディレクトリ

Bitcoin CoreのAPIを使わずに直接データを参照できないかなーとデータディレクトリの構造を調べてみた。bitcoindを起動するとホームディレクトリ直下に.bitcoinディレクトリが生成される。Bitcoinの設定やデータはこのディレクトリ内に格納される。 ディレク…

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で定義…

Bitcoinのトランザクションの手数料と優先度

トランザクションの手数料や優先度についての知識がぼんやりしてたのでまとめてみる。Bitcoinの取引を行う際に一定額以下の取引については手数料が発生する。 取引手数料はマイナーが処理し受け取るもので、ハッシュの生成に成功して新しいブロックができる…

asset IDとasset quantityの算出方法

Open Assets Protocolではアセットを一意に識別するとasset IDと、任意の色付けされたトランザクションにいくつのアセットが含まれているか定義したasset quantity listが重要な要素となる。前者のasset IDは、ブロックチェーン上に明示的には現れてこず、後…

トランザクションからasset IDを抽出する

2015.07.23 追記 実際にトランザクションを辿ってみた↓の記事の方がわかりやすいかも。asset IDとasset quantityの算出方法 - Develop with pleasure!techmedia-think.hatenablog.com Open Assets Protocolでは、通常のBitcoinのブロックチェーンにasset ID…

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…

Open Assets Extensions to Payment Requestsの仕様(訳)

2015-05-06にOpen Asset Protocolに新しく追加されていた仕様「Open Assets Extensions to Payment Requests」をざっと訳してみる。OpenAssets/open-assets-protocolgithub.comこの機能は、通常のBitcoinに代わってOpen Assets Protocolを使ってBIP-70とBIT-…

Colorcoreを使ったアセットの送付

Open Asset Protocolに対応したウォレットOpenAssets/colorcore · GitHub を使ってアセットを送付してみる。 アセットの生成 colorcoreを使ってアセットを生成する。 $ python3 colorcore.py issueasset akXDPMMHHBrUrd1fM756M1GSB8viVAwMyBk 100↑でOpen Ass…

Open Assets Protocolのasset IDを生成する

lian/bitcoin-ruby · GitHubを使って、Open Asset Ptotocolで使われるasset IDを生成してみる。asset IDの生成手順は以前ブログに書いた↓の手順。 1.発行者は初めに秘密鍵を生成する (こんな→ 18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A20…

Bitcoin Core v0.10.0のAPIリスト

Bitcoin Core(v 0.10.0)が提供するAPIをリストアップ。引数や使い方の詳細は、Developer Reference - Bitcoin参照。 addmultisigaddressP2SHのマルチシグネチャアドレスをウォレットに追加する。 addnodeノードリストへのノードの追加、削除及び、ノードへ…