Develop with pleasure!

福岡でCloudとかBlockchainとか。

マークルツリーを利用したハッシュベースのアキュムレータ「Utreexo」

BitcoinのUTXOセットを管理するにあたって、そのストレージ要件を大幅に削減すると期待されているアキュムレータ。昨年のScaling Bitcoinでは、スタンフォード大学のBenedikt BünzがRSAを利用したアキュムレータを紹介した↓ techmedia-think.hatenablog.com …

Bitcoinネットワークの安全性を向上させるための新しいトランザクションリレープロトコル「Erlay」

先日、Gleb Naumenko, Pieter Wuille, Gregory Maxwell, Sasha Fedorova, Ivan Beschastnikhらが発表したBitcoinの新しいトランザクションリレープロトコル「Erlay」について論文読んでみた↓ https://arxiv.org/pdf/1905.10518.pdf 現在のトランザクションリ…

Grinでオフチェーン決済するためのPayment Channelプロトコル「Elder Channel」

Mimblewimbleを実装したGrinにはBitcoinのようなスクリプト機能は存在しない。コインの所有権は、秘密鍵の役割をするPedersen CommitmentのBlinding Factorの値を知っているかどうかで、UTXOを使用する際はその値を使った電子署名が求められる。Mimblewimble…

c-lightningのPluginの作り方

c-lightning 0.7から任意の言語でPluginを書けるようになった↓ blockstream.com 現在、C、Python、Golang、JavaでPluginを書くためのライブラリが提供されている。 c-lightningのPlugin Pluginを利用することでc-lightningが提供する機能を拡張することがで…

BitcoinへCovenantsの導入を提案するbip-coshv

Bitcoinは通常ロックスクリプトにロックされたコインをアンロックできるアンロックスクリプトを提供できれば、そのコインはどこにでも送金できる。これに対し、あるコインをアンロックした場合、そのコインの送付先を限定する仕組みがCovenantsだ。つまりあ…

Tapscript上で限定的に署名済みトランザクションのインプットの参照先をリバインド可能にする提案 bip-anyprevout

bip-taprootやbip-tapscriptが定義されたが、これに関連してLightning Networkのeltooを実現するための提案も出てきてるので見てみる↓ https://github.com/ajtowns/bips/blob/bip-anyprevout/bip-anyprevout.mediawiki eltooは、LNにおいて旧状態がブロード…

TaprootのアウトプットのスクリプトTapscriptに適用される新しいスクリプトルールを定義したBIPドラフトbip-tapscript

TaprootのBIPドラフトについて書いた↓ techmedia-think.hatenablog.com ので、続いてそのTaprootのアウトプットで使用されるスクリプト = Tapscriptに適用されるスクリプトの新しいルールの提案「bip-tapscript」↓について見てみる。 https://github.com/sip…

BitcoinにTaprootを導入するBIPドラフトbip-taproot

先日、Bitcoinの開発者MLでPieter WuilleがTaproot、Schnorr署名およびマークルブランチをベースとしたコインの使用ルールである新しいSegwitバージョン1のアウトプットタイプを提案した↓ https://github.com/sipa/bips/blob/bip-schnorr/bip-taproot.mediaw…

LNDに実装されたStatic Channel Backup

先日リリースされたLND 0.6-beta↓ Release lnd v0.6-beta · lightningnetwork/lnd · GitHub で新しくStatic Channel Backup機能が導入された。 通常のオンチェーンの場合であれば、全てのトランザクションはチェーン上に記録されているためバックアップは簡…

Atomic Swapを拡張してオプション、証拠金、先物取引などを可能にするAtomic Swaptions

Atomic Swapプロトコルは第三者を信頼することなく、異なるブロックチェーン間で暗号通貨の交換を可能にするプロトコル。単なる暗号通貨の交換だけでなく、オプションや先物のようなデリバティブ資産の保有を希望する参加者向けにAtomic Swapプロトコルを拡…

A scalable drop-in replacement for merkle trees at Scaling Bitcoin 2018

Scaling Bitcoin 2018復習シリーズ。今回は、昨年もBullet Proofsなど発表したスタンフォード大学のBenedikt Bünzによる「A scalable drop-in replacement for merkle trees」の発表で、内容的にはマークルツリーの代わりにRSAアキュムレータを利用したUTXO…

担保付き債務を表現するHashed Time-Locked Collateral Contract(HTLCC)を定義したBIP-197

トラストレスかつ仲介機能(中抜き)を排除した方法で超過担保付き商品を作成するためにAtomic Swapを利用したAtomic Loansを提案するペーパー↓ https://arxiv.org/pdf/1901.05117.pdf ブローカー抜きに借り手と貸し手の間でローン契約を結ぶ際に、担保を設…

BEAMが提供する監査機能

MimblewimbleではPedersen Commitmentにより取引する量が秘匿され、さらにスクリプトがなくPedersen CommitmentのBlinding Factorがそのコインの所有権を証明するキーになる。そのため、Perdersen Commitmentを見ただけでは誰から誰へのいくらの送金なのかは…

OP_CODESEPARATORは廃止の流れか?

Bitcoin開発者の1人であるMatt Coralloが提案するコンセンサスルールのクリーンナップ↓ https://github.com/TheBlueMatt/bips/blob/cleanup-softfork/bip-XXXX.mediawiki まだBIPにはなってないが、このクリーンナップの内容の1つがOP_CODESEPARATORの廃止…

Grinで作るAtomic Swapとアウトプットへのタイムロック条件の適用

techmedia-think.hatenablog.com について整理したので、今回は応用編ということでAtomic Swapや、タイムロックの仕組みをアウトプットと組み合わせた(BitcoinのOP_CLTV使うようなイメージ)条件付きのタイムロック支払いのコントラクトの構成方法について…

Grinでコントラクトを作る際の基本要素

MimblewimbleとGrinのトランザクション構成が把握できたので↓ techmedia-think.hatenablog.com 今回は↓を参考にGrinでどんなコントラクトを作る際に使える基本要素についてまとめる。 https://github.com/mimblewimble/grin/blob/master/doc/contracts.md Mi…

MimblewimbleとGrinのトランザクションフロー

Grinのトランザクションのトランザクションフローを見てたら、オリジナルのMimblewimbleと署名プロセスが少し変わってたのでまとめてみた。 Mimblewimbleの基本機能 Pedersen Commitment Gregory Maxwellが提案したConfidential Transactionで導入されたコイ…

自称サトシになる方法

最近また自称サトシが登場してるみたいだったので、自称サトシになるために必要なことを調べてみた。 ecdsa - If someone wanted to pretend to be Satoshi by posting a fake signature to defraud people how could they? - Bitcoin Stack Exchange 自称サ…

離散対数仮定が崩れた際にConfidential Transactionチェーンのコインを保護するSwitch Commitment

Stanford Blockchain Conference 2019のGrinのセッションで、Grinの構成要素として挙げられていたSwitch Commitmentについて↓ https://eprint.iacr.org/2017/237.pdf Bitcoinなどの多くの暗号通貨では楕円曲線暗号を導入しており、楕円曲線暗号の安全性は離…

コインの所有を証明するProof of Reserveの標準化(BIP-127)

少し前に、取引所に自分が預けているコインが本当に存在するか一斉に引出して確認してみようとするProof of Keysというイベントがあって、どこぞの取引所が事前に引き出し制限始めたというニュースもあったけど、ユーザーにとっては預けている資産がちゃんと…

How Much Privacy is Enough? at Scaling Bitcoin 2018

2019年になったけど、Scaling Bitcoin 2018 復習シリーズ。今回は、Zcashのファウンダーの1人でもあるCornell TechのIan Miersによる「How Much Privacy is Enough?」↓(1時間あたりから) youtu.be 書き起こしは↓ http://diyhpl.us/wiki/transcripts/scali…

Compact Block Filter(BIP-158)をRubyで実装してみた

Bitcoinの軽量クライアント向けに自身に関連するトランザクションを判別する仕組みとしては、Bloom Filterを利用するBIP-37がベースだが、軽量ノード側のプライバシーの改善とフルノードの負荷を軽減するためCompact Block Filterという新しい仕組みが提案さ…

2017年に起きたMoneroのキーイメージを細工したコイン無限生成の脆弱性の内容

2017年2月に発覚したMonero(正確にはCryptoNoteのプロトコルを採用している暗号通貨)でコインを無限生成できる脆弱性について、原因が曲線の特性に起因するもので興味深かったので調べてみた。 ww.getmonero.org この脆弱性自体は実際にMoneroでは悪用され…

The GHOSTDAG Protocol at Scaling Bitcoin 2018

Scaling Bitcoin 2018 復習シリーズ。今回はヘブライ大学のYonatan Sompolinskyによる「The GHOSTDAG Protocol」の発表↓(30分あたりから) youtu.be 書き起こしは↓ ghostdag ホワイトペーパーは↓ https://eprint.iacr.org/2018/104.pdf Bitcoinのオンチェー…

Bitcoin CoreはなぜECDSA署名にLOW Rを適用するようになったのか?

Bitcoinでは、送金時にトランザクションにセットする署名に、現在ECDSA署名を採用している。 秘密鍵をx、対応する公開鍵をP = xGとした場合、メッセージにmに対するECDSA署名は以下のように作成する。 署名の作成 ランダムな値kを選択する。 点R = kGを計算…

Statechains: Off-chain Transfer of UTXOs at Scaling Bitcoin 2018

Scaling Bitcoin 2018復習シリーズ。今回はRuben Somsenによる「Statechains: Off-chain Transfer of UTXOs」の発表について見てみる。 youtu.be 書き起こしは↓ http://diyhpl.us/wiki/transcripts/scalingbitcoin/tokyo-2018/statechains/ ホワイトペーパー…

送信者−受信者間で簡単なコインジョインを行うBustapayプロトコルを定義したBIP-79

Bitcoinのトランザクションはインプットに送信者のUTXOが、アウトプットに受信者のアドレスと送信者のお釣りがセットされる構成が一般的。ブロックチェーンの分析をする企業でよく採られるアプローチでは、こういうトランザクションの場合、インプットのUTXO…

2P-ECDSA: Fungible 2-of-2 MultiSigs for Today's Bitcoin at Scaling Bitcoin 2018

Scaling Bitcoin 2018 復習シリーズ。今回はLightning LabsのConner Fromknechtによる「2P-ECDSA: Fungible 2-of-2 MultiSigs for Today's Bitcoin」の発表↓ youtu.be 書き起こしは↓ scriptless-ecdsa 前半はLindellベースの2者間のECDSA署名プロトコル↓の解…

The State of Atomic Swaps at Scaling Bitcoin 2018

Scaling Bitcoin 2018復習シリーズ。今回は10/7のThomas Eizinger(COMITプロトコル開発してる人みたい)が発表した「The State of Atomic Swaps」の内容について見てみる↓ www.youtube.com 書き起こしは↓ http://diyhpl.us/wiki/transcripts/scalingbitcoin…

Output Descriptorとscantxoutsetを使ってUTXOセットをスキャンする

Bitcoin Core 0.17.0からUTXOセットをスキャンするscantxoutsetというRPCが追加された。 Bitcoin Core :: scantxoutset (0.17.0 RPC) 今まではウォレット内に鍵を持つUTXOの情報はlistunspentなどで取ってこれてたけど、↑はウォレット機能とは別で、UTXOセッ…