Develop with pleasure!

福岡でCloudとかBlockchainとか。

Bitcoin

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サイト上…

getblockchaininfoで確認するBIP-9によるソフトフォークの状況

先日、segwitがtestnetで実行できるようになったBitcoin Core 0.13.0がリリースされた。 このソフトフォークのデプロイは、BIP-9で定義されたversion bitsを利用している。 techmedia-think.hatenablog.com このソフトフォークの状況はgetblockchaininfoとい…

Bitcoin Core 0.13.0の主な機能

Bitcoin Core 0.13.0がリリースされた。 Bitcoin Core :: Bitcoin Core 0.13.0 Released! Bitcoin Coreのブログより、主な新機能は↓ segregated witnessの準備 0.13.0で一番重要なコードの変更で、今後のソフトフォームに向けてsegwitのコードが含まれている…

双方向Payment ChannelでのHTLCsの利用

techmedia-think.hatenablog.com techmedia-think.hatenablog.com と続いて最後の第3部では、オフチェーンである双方向Payment ChannelでどうやってHTLCsを使った取引を行うかという点について解説されてる↓ bitcoinmagazine.com Lightning Network 前回ま…

HTLCsを利用した中間者を経由するBitcoinの支払い

前回の双方向Payment Channel↓に続いて、Bitcoin MagazineのLightning Network記事の第二弾であるHTLCsを使ったネットワークの作成部分についてみてみる。 techmedia-think.hatenablog.com bitcoinmagazine.com ネットワーク 前回の記事でアリスとボブの間で…

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

以前、絶対時間を使用するOP_CLTV(BIP-65)で指定期間まで資金をロックするスクリプトを作成したので↓ techmedia-think.hatenablog.com 今回は、相対時間を使用するOP_CSV(BIP-112)↓を使って同様のことをやってみる。 techmedia-think.hatenablog.com OP_…

双方向のPayment Channelの仕組み

Bitcoin MagazineのLightning Networkの記事をベースに双方向Payment Channelの仕組みについて理解する。 bitcoinmagazine.com 双方向Payment Channelの構成要素 unconfirmed transaction 最初のCommitment Transactionを作成する際、入力となるOpening Tran…

bitcoinjのmicropayment channelの実装

bitcoinjでは0.10からClient/Server形式のpayment channelをサポートしているみたいなので、どういったものなのか見てみる。 Working with micropayment channels Protocol overview ベースとなってるBitcoin wikiの記事 https://en.bitcoin.it/wiki/Contrac…

Open Assets Protocolを使ったアセットのAtomic Swap

Open Assets Protocolのアセットを1トランザクションで交換するAtomic Swapをやってみた。 シナリオ アリスはアセットID”oQWgTxFmK2EAYuoDvs2bLPNo9MG5nXnmyM”のアセットを1,000個持っている。 ボブはアセットID”oM4p6N7CqTTcujSHkiRKXzzVcMuXek8aiz”のアセ…

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では、任意の複雑なトランザクションをサポートするためのアドレスについて説明する。…