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

Develop with pleasure!

福岡でCloudとかBlockchainとか。

Bitcoin Core 0.14.0のリリース

Bitcoin Core 0.14.0がリリースされたのでどんな変更があったのか見ておく↓ Bitcoin Core :: Bitcoin Core 0.14.0 Released with Performance Improvements 主な新機能は↓ IBDのパフォーマンス改善 ブロックチェーンのデータサイズは絶えず増加していて、現…

UTXOのサイズ削減のアプローチTXO Commitments

BitcoinのUTXOのデータサイズは増加する一方で、フルノードを運用する際のボトルネックにもなっているが、そのUTXOの成長の問題を解決する方法としてBitcoinのコア開発者の1人であるPerter Toddが昨年 TXO Commitmentsという仕組みについてブログに投稿して…

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の新し…

Lightning Networkで古いCommitment Txを取り消すRevocation Key

以前、Lightning Networkを構築する際のPayment Channelの仕組みについて書いた↓ techmedia-think.hatenablog.com プリイメージを使ったコミットメントトランザクションの取消 このPayment Chanelを使ったオフチェーンの決済には、悪意あるユーザによって最…

P2WSHを使うトランザクションの作成と署名

P2WPKHの署名方法について書いた↓ので techmedia-think.hatenablog.com 今回はP2WSHの署名について。 単純なマルチシグでもつまならいのでOP_CSVのBIPに出てくるLNのトランザクションサンプルのP2WSHにしてみる↓ https://github.com/bitcoin/bips/blob/maste…

P2WPKHを使うトランザクションの作成と署名

だいぶ前に書き始めて放置してたのでちゃんと実装してみた。 以前↓のようにwitnessなトランザクションのパース方法について書いたので、 techmedia-think.hatenablog.com 続いてwitnessなトランザクションを作ってみる。 P2WPKHにBitcoinを送付 まず最初にP2…

bitcoin-rubyで決定性署名を生成する

bitcoin-rubyのP2PKHの署名のデフォルト実装 bitcoin-rubyを使ってP2PKHのUTXOを入力にしたトランザクションの署名は↓のように書ける。 require 'bitcoin' Bitcoin.network = :testnet prev_key = Bitcoin::Key.from_base58('秘密鍵') prev_tx = Bitcoin::Pr…

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

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

Lightning Networkを使ったクロスチェーン取引

Bitcoin MagazineのLightning Networkを使ったクロスチェーン取引の拡張についての記事が出てた↓ので見てみる。 bitcoinmagazine.com Atomic Swap そもそもBitcoinとアルトコインの相互運用というのは、別に新しいことではなく、2013 年にTier Nolanが紹介し…

HDウォレット(BIP-32)

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

Bitcoin Core 0.13.2のリリース

先日Bitcoin Core 0.13.2がリリースされた↓ bitcoincore.org リリースノートは↓ bitcoincore.org 主な変更点 0.13系のマイナーアップデートなので、基本的にはBugfixとパフォーマンス改善のリリースになるので、新機能のリリースは無い。 古いOSをサポート対…

Teechanの決済プロトコル

Bitcoin-NGやCovenantsなどの提案をしているコーネル大学の先生方が先日Teechanというオフチェーン決済のプロトコルに関するブログとホワイトペーパーを公開していたので見てみる↓ hackingdistributed.com https://www.cs.cornell.edu/People/egs/papers/tee…

Federated Pegのアドレス導出スキーム

Blockstreamが公開しているSidechainのホワイトペーパーのAppendixにFederated Pegを行う際のP2SHアドレスの導出スキームが定義されている。このFederated Pegの仕組みは同じくBlockstreamが公開しているサイドチェーンの実装Elements Alphaでも利用されてい…

楕円曲線を使ったゼロ知識証明

↓のゼロ知識証明の解説記事に掲載されている楕円曲線を使ったゼロ知識証明をbitcoin-rubyを使って検証してみた。 www.atmarkit.co.jp 検証手順は↑のの記事の通りで、 証明者(アリス)と検証者がいて、楕円曲線上の点Pとアリスの秘密鍵aがあるとき、その公開…

Rubyで楕円曲線の鍵共有(ECDH)と加算

Bitcoinで使われる楕円曲線の鍵について、bitcoin-rubyを使って鍵交換(ECDH)と楕円曲線の加算をしてみる。 鍵共有(ECDH) アリスとボブが持つ鍵を使って共通鍵を生成してみる。 アリスとボブはそれぞれお互いの公開鍵を知っており、秘密鍵をそれぞれa、b…

ペアリングベース暗号のライブラリをRubyから使う

ペアリングベースの暗号の基礎的な数学的演算をCで実装したlibpbcというライブラリがある。 PBC Library - Pairing-Based Cryptography - About このライブラリをJavaに移植したJPBCというライブラリもある。 JPBC - Java Pairing-Based Cryptography Librar…

Elementsで実装されているOP_CHECKSIGFROMSTACKを使ったCovenants

Scaling Bitcoinのセッションで提案されていた、Bitcoinの秘密鍵が例え盗まれても、Bitcoin自体が盗まれないようにするCovenantsを使った金庫についてブログを書いた↓けど、 techmedia-think.hatenablog.com このアプローチとは別に、Blockstreamが提供する…

Bitcoinの使われ方を制限することで盗難を防ぐCovenants

ミラノで開催されたScaling Bitcoinのセッションの1つだったCovenantsについてホワイトペーパーが公開されてたので見てみた。 http://fc16.ifca.ai/bitcoin/papers/MES16.pdf ※ ↑の論文は特にBIPにもなっている訳でもないので、今後Bitcoinのスクリプトシス…

Pay-to-contract プロトコル

サイドチェーンElements AlphaでBitcoinのブロックチェーンとサイドチェーン間で資金を移動する際に使われているPay-to-contractと呼ばれるプロトコルについてざっとホワイトペーパー読んでみた。 https://arxiv.org/pdf/1212.3257.pdf Pay-to-contractプロ…

Elements AlphaにおけるFederated Pegの仕組み

Blockstreamが開発しているサイドチェーン実装のElementsで実装されているFederated Pegの技術的な仕組みが↓で公開されてたので見てみる。(記事自体は2016/02/29に書かれたもの) The Federated Peg in Elements Alpha — The Elements Project メインチェー…

Segwitのアップグレードガイド

mainnetへのSegwitデプロイを有効にするBitcoin Core 0.13.1がリリースされ、それに合わせてSegwitをサポートしたい人、したくない人向けにアップグレードガイドも公開されてたので見てみる↓ malleabilityの問題や署名の前後でtxidが変わらないのはコントラ…

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

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

コントラクトの関数で例外を投げる

Solidityで作成するコントラクトの関数から例外を投げる方法について。 http://solidity.readthedocs.io/en/develop/control-structures.html#exceptions コントラクトの関数内で手動で例外を投げたい場合throwを使う。例外が投げられると現在実行中の処理が…

Rubyで書かれたテスティングフレームワークtethでコントラクトをテストする

Ethereum使ったアプリケーションをRubyで書けないかなーと思ってRubyのライブラリを調べてみた。 EthereumのRubyライブラリ 公式ドキュメントで紹介されているのは以下の3つ。 ruby-ethereum Rubyで書かれたEVM(Ethereum Virtual Machine)の実装 github.c…

witnessデータを含むブロックのwitness rootとcommitment hashの計算

Segwitの導入にあたってブロック作成時にwitness トランザクションの署名が確かにブロックに含まれていることを保証するために新しいCommitment構造が導入されている。 techmedia-think.hatenablog.com コインベーストランザクションに追加されたCommitment…

Asset Definition URLをP2SHのredeem scriptに設定する

Open Assets Protocolではアセットのメタデータを定義したAsset DefinitionをURLで指定する。 techmedia-think.hatenablog.com ↑に記載されているように、Asset Definition URLとブロックチェーン上のアセットを紐付ける方法は以下の2種類がある。 アセット…

Solidityのソースファイルのレイアウト仕様

Layout of a Solidity Source File — Solidity 0.4.3-develop documentation Solidityのソースファイルのレイアウト仕様について↑ざっとみておく。 ソースファイルには任意の数のcontractの定義を記述できる。 Version Pragma ソースファイルにはversion pra…

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

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

Ethereumのコントラクトのロジックの更新

Ethereumのコントラクトはブロックチェーンに記録されると基本的に変更ができない。 じゃあコントラクトにバグがあったり機能追加したい場合にどうするの? という疑問がわく。 DELEGATECALL Homesteadから導入されたEIP-7として定義されているDELEGATECALL…

Clion(gdb)を使ってbitcoindをデバッグ

bitcoindの挙動を追いたくなり、gdbを使ってデバッグしてみる。ただ、コマンドベースでブレークポイント貼ったり変数確認したりするのはシンドイので、Clionが2016.2からサポートしたgdbのRemote Debug↓を利用する。 CLion 2016.2 EAP: Remote GDB debug | C…

Segwit導入におけるRPCの主要な変更点

techmedia-think.hatenablog.com 先月リリースされたBitcoin Core 0.13.0にSegwitのコードがマージされtestnetで利用可能になったので、関連するRPCの変更点を見てみる。 RPCの変更点 getblock と getblockheader の変更点 出力内容に新しく以下の項目が追加…

Segwitなトランザクションをパースしてみる

witnessなトランザクション用にBIP-144で新しいシリアライゼーションフォーマットが定義された↓ techmedia-think.hatenablog.com ので実際にそのフォーマットに従ってトランザクションをパースしてみた。 フォーマットの変更点 詳細はBIP-144に定義されてい…

bitcoin-rubyを使ったマルチシグアドレスの作成と署名

bitcoin-rubyを使ってマルチシグの作成とマルチシグでロックされたUTXOへの署名をする。 他の言語のライブラリもそうだけど、bitcoin-rubyもBitcoin::ScriptクラスでP2SHを使ったマルチシグアドレスの作成と署名をサポートしている。 マルチシグアドレスの作…

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とい…

Solidityで記述するEthereumのスマートコントラクト

Ethereumを使ったスマートコントラクト(Solidity版)の作り方について見てみる。 Introduction to Smart Contracts — Solidity 0.4.3-develop documentation シンプルなスマートコントラクト ストレージ Solidityにおけるコントラクトとは、Ethereumのブロ…

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が各署名から非スタック引数を抽出し評価することで、署名者はトランザクショ…