Develop with pleasure!

福岡でCloudとかBlockchainとか。

取引所の支払い能力を証明する(Proof of Solvency)Provisionsプロトコル

Mt.Goxの破綻後に発表された取引所の支払い能力を証明するプロトコルProvisionsのホワイトペーパー↓ http://www.jbonneau.com/doc/DBBCB15-CCS-provisions.pdf 仮想通貨を取り扱う取引所では、一般的な銀行の仕組みである部分準備金銀行のようなアプローチは…

Proofs of Proof of Work

Scaling Bitcoin 2017のFlyClientの内容を追っていったら前提としてNiPoPoWs(Noninteractive-Proofs-of-Proof-of-Work)→ PoPoWs(Proofs of Proof of Work)と関連研究が続くので、まず最初にProofs of Proof of Workのプロトコルについて調べてみる。 Pro…

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

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

ElementsでConfidential Transactionを作ってみる

techmedia-think.hatenablog.com Elementsのセットアップとコインの移動ができたので↑、続いてElements上でConfidential Transactionを作ってみる。 Confidential Transactionについては↓ techmedia-think.hatenablog.com 以下のサイトを参考にConfidential …

サイドチェーンにBitcoinをペグしてみる。

Confidential TransactionをサポートしているElementsで実際にCTを作ってみようと思い、まずElementsのセットアップしてサイドチェーンにコインをペグする。 github.com Elementsのセットアップ 今回使用したElementsはelements-0.14.1ブランチのソース。(…

TREZOR導入してみた

TREZOR本体に付属のUSBケーブル使ってPCに接続する。 繋いだらブラウザ開いて、trezor.io/start にアクセス。 ページ下部で、TRZORのセキュリティニュースなどを配信してるみたいなので、メールアドレスを登録。 続いてTREZORウォレットのセットアップ。「In…

任意のデータに対する署名検証を行うOP_DATASIGVERIFY(BUIP-78)

OP_GROUPに加えてBitcoin Cashの中期開発計画に含まれているのが、Bitcoinのトランザクションの署名検証の際に使われるECDSAと同じアルゴリズムを使って、任意のデータの署名を検証するOP_DATASIGVERIFYという新しいopcode。 https://github.com/BitcoinUnli…

Bitcoin Cash上でネイティブにカラードコインをサポートするOP_GROUP

Bitcoin CashのブロックチェーンでBCH以外にネイティブにカラードコインをサポートするためにOP_GROUPという新しいopcodeが提案されている↓ https://github.com/BitcoinUnlimited/BUIP/blob/master/077.mediawiki OP_GROUPとは? OP_GROUPはBitcoinのスクリ…

ペイメントチャネル間の資金移動を可能にするChannel Factory

トラストレスな双方向のオフチェーン決済を可能にするペイメントチャネルだが実用に向けてはまだ課題も多い。 techmedia-think.hatenablog.com 課題の1つにペイメントチャネルのキャパシティ(=チャネル内で決済できる金額の上限)が固定されている点がある…

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をリーフノードにしたマークルツリーを構築し、そのマークルルートの値が入れられるようになっている。ブロックにどれだけたくさんの…

SIGHASH_FORKIDとfork idを使ったリプレイプロテクションの仕組み

8/1にBitcoin Cashが分岐した際、BTCとの間のリプレイアタックに対する保護の仕組みを組み込む必要があり、この時SIGHASHを利用する仕組みが導入された。 spec/replay-protected-sighash.md at master · Bitcoin-UAHF/spec · GitHub 最近分岐したBitcoin Gol…

Scriptless Scriptで実現するAtomic Swap

Atomic Swapといえば同じハッシュ関数とタイムロックの仕組みを持つブロックチェーンであれば、それぞれのチェーンの通貨をトラストレスに交換することができるプロトコルで、最近だとBitcoinやLitecoin、BitcoinとEthereumでAtomic Swapの事例が出てきてい…

OpenSCでマイナンバーの登録情報を確認してみた

OpenSCにマイナンバーカード(JPKI)の対応がマージされていたので、OpenSCを使ってマイナンバーカードの登録情報を確認してみる。 github.com 使用したカードリーダーは↓でMacでも認識できた。 amzn.to カードに登録されているオブジェクトのリスト確認 ま…

Bitcoin Cashのトランザクションを作成してBCHを入手してみた

8/1のBitcoin CashのハードフォークでBitcoinがBTCとBCHに分岐した。分岐前にBTCを保持していると、それと同額のBCHも持っていることになる。 取引所などに預けていて、取引所がBCHに対応していれば何もしなくても取引所が同額のBCHが付与してくれる。モバイ…

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署名のエンコーディング関連の改変を解消するためにト…

ElementsのAsset tagの生成と追加発行の仕組み

ElementsでConfidential Assetsについて、以前ブログを書いた↓ techmedia-think.hatenablog.com けど、Asset Tagや実際にアセットを追加発行する際のトークンなどがどういうロジックで生成されて、何を持って追加発行が承認されるのか仕組みについてよく分か…

Bitcoin Coreのテストコードの実行方法

既存のコードの追加・改修の際に、動作を保証するテストコードがあり、自動テストできる環境があるのは重要で、Bitcoin Coreにももちろんテストコードと自動テストの仕組みがある。 Bitcoin Coreには単体テストと、リグレッション及びインテグレーションテス…

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

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

Bitcoinの高速リレーネットワークFIBRE

ブロックサイズを拡張について、データ量が多くなるためデータを転送する際により高いネットワーク帯域が求められるようになり、ハッシュパワーの集中が促進するのではないかという懸念がある。 より高速なリレーネットワークを活用することで、この問題を解…

HFリサーチ”BIP-MSMMHHF”

Welcome - Bitcoin Hard Fork Research ↑の2つめの、James Hilliardが書いたマルチステージマージマイニングヘッダハードフォーク↓について見てみる。 https://github.com/jameshilliard/bips/blob/bip-msmmhhf/bip-msmmhhf.mediawiki 簡単に言うと、ハード…

HFリサーチ”BIP-MMHF”

ブロックサイズの拡張(1M→2M)を目的としたハードフォークに注目が集まっているけど、ブロックサイズとは別に↓のような問題を解消するためにブロックヘッダの構造についてもそろそろ変更が必要じゃないかと思う。 extra nonceの確保 現在のハッシュレートで…

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

現在、ソフトフォークのアクティベートと方法はBIP-9のversion bitsを使った方法が採用されている↓ techmedia-think.hatenablog.com この方法を使ってOP_CSVのソフトフォークがリリースされ(シグナリング開始から約2ヶ月でアクティベート)、Segwitのデプ…