Develop with pleasure!

福岡でCloudとかBlockchainとか。

Bitcoin

Taroのアセット発行の仕組み

前回の記事でTaroのアセットツリーの構造を確認したので↓ techmedia-think.hatenablog.com 今回は、Taroでのアセット発行の仕組みをRubyで実装しながらみていく。 tarocliを使ったアセットの発行 tarocliのassets mintコマンドを利用するとアセットを新規発…

lnd v0.15.1-beta以下で発生したチェーン同期の障害

lnd v0.15.1-beta以下で発生したlndでチェーンの同期ができなくなる不具合↓についてまとめておく。 github.com 正確には、btcdの不具合↓ github.com 障害の内容 今回発生した障害は、lndでブロックチェーンの同期ができなくなるというもの。そのため、その間…

x-only public keyの課題とワークアラウンドな回避策

ちょっと前のBitcoin Optechのニュースレターでx-only public keyの課題とその回避策について取り上げられていたので、詳しく調べてみた。 x-only public keyとは? Bitcoinに導入されたTaprootでは、署名検証に使用する公開鍵に32バイトのx-only public key…

IONのDIDのリカバリーと無効化操作をアンカリングしてみる

techmedia-think.hatenablog.com techmedia-think.hatenablog.com ときたので、残りのRecoverおよびDeactivate操作をアンカリングしてみる。 Recover操作 Recoverは、Update Keyの更新とRecovery Key自体の更新および、DID State Patcheで定義したDID Docume…

IONのDIDを更新してみる

前回の記事でIONのDIDを登録したので↓ techmedia-think.hatenablog.com 今回は、登録したDIDの鍵を更新するUpdate操作をアンカリングしてみる。 Update操作 Update操作は、現在DIDに紐付けられているUpdate Keyを使ってDID Documentの更新(署名鍵やservice…

IONのDIDをIPFSとBitcoinにアンカリングしてみる

前回は、IONのDIDを生成した↓ techmedia-think.hatenablog.com ↑では、DID Documentを生成し、IONのプロトコルに沿って識別子であるDIDを計算したけど、実際にこれだけだとローカルで計算してるだけなので、続いて、このDIDをCAS(Content Addressable Stora…

USDTを使ってBitcoin Coreをトレース

Bitcoin Coreでは、User-space Statically Defined Tracing(USDT、※Tetherではない)ベースのトレースポイントが提供されており、Linux環境で動作するBitcoin Coreでは、このトレースポイントを使って、内部のデータにアクセスできるようになっている。 Bit…

Taroのアセットツリーの構造

Lightning Labsが発表したBitcoin上の新しいアセットプロトコルTaroについて、今回はTaroのアセットツリー周りのデータ構造/表現についてみていく。 Taroのアセットツリー Taroは、Taprootを利用したアセットのオーバーレイプロトコルになる(Taprootベース…

Merkle Sum Sparse Merkle Tree

先日、Olaoluwa Osuntokunが発表したTaprootを利用したアセットオーバーレイプロトコルTaro↓ https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-April/020196.html 今回はその構成要素の1つであるMerkle Sum Sparse Merkle Tree(MS-SMT)の仕…

1つのUTXOの所有権を複数人でシェアするCoinPool

Lightning Networkなどの現在主流のペイメントチャネルプロトコルはいずれも2人で1つのUTXOの所有権を管理するプロトコルだけど、N(N > 2)人で1つのUTXOの所有権を管理できるようにするプロトコルがCoinPoolで、少し前にホワイトペーパーが公開された↓ので…

オフチェーンプロトコルのプライバシーを向上させるオンチェーンウォレットのポリシーを定義したBIP-326

最近オフチェーンプロトコルのプライバシーを向上させるために、オンチェーンウォレットで実装が推奨されるポリシーが、BIP-326として定義された↓ https://github.com/bitcoin/bips/blob/master/bip-0326.mediawiki Informational BIPなのでコンセンサスに影…

CTVを利用したDLCプロトコルのパフォーマンス改善

先月Lloyd Fournierにより提案された、現在提案中のBIP-119のCTV(OP_CHECKTEMPLATEVERIIFY)を使うとDLCのパフォーマンスが大幅に向上するという内容についてみてみる↓ https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-January/019808.html …

CTVとANYPREVOUTを代替するTXHASHとCSFS

先月Russell O’ConnorがBitcoin-Devメーリングリストに投稿した、Bitcoinの次のソフトフォークの内容として検討されている、CTV(OP_CHECKTEMPLATEVERIFY)opcodeと、eltooスタイルのLightningチャネルを構成可能にするANYPREVOUTを、新しいopcode TXHASHとC…

testnetで発見されたNeutrinoのTaproot関連の問題と軽量クライアントの課題

少し前に報告されたtestnetで発生したNeutrinoのフィルタ処理の問題について↓ https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-November/019589.html Neutrinoの位置付け LNノード実装の1つであるLNDのブロックチェーンのバックエンドの連携…

GraftrootとG'rootを組み合わせたEntroot

Pieter WuilleとAnthony Townsの議論から、GraftrootとG'rootを組み合わせたEntrootというプロトコルが公開されてる↓ https://gist.github.com/sipa/ca1502f8465d0d5032d9dd2465f32603 Graftrootとは? Graftrootは、Gregory MaxwellがTaprootを発表した後に…

Generalized taproot(G'root)

Generalized taproot(G'root)は、2018年にAnthony Townsによって提案されたPedersen Commitmentを使ってTaprootを実現するプロトコルの提案。 Taprootのscript-pathは、アンロック条件をマークルツリーにエンコードするMAST(Merklized Alternative Script…

c-lightningをRaspberry PiにセットアップしてUmbrelのBitcoin Coreと連携してみる

Diamond Handsに参加するのにUmbrel on Raspberry Pi 4を使ってフルノードのBitcoin CoreとLightningノードのLNDを家庭内LAN環境で稼働し始めたんだけど、1台Raspberry Pi 3が余っていたので、それを使って追加でc-lightningのノードを立ててみた。 Umbrelの…

Inherited IDを使ったトランザクションの参照と新しいチャネルプロトコル2Stage

先月、Bitcoin-DevメーリングリストにJeremyによって代理投稿された、匿名の開発者(John Law)による投稿では↓ https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019470.html 現在提案されれているBIP-118(anyprevout)に代わり、In…

Dust limitを悪用したLightningプロトコルの脆弱性の開示

LNの実装に影響を与える仕様レベルの脆弱性が公開されていたので内容を見てみよう↓ [Lightning-dev] Full Disclosure: CVE-2021-41591/ CVE-2021-41592 / CVE-2021-41593 "Dust HTLC Exposure Considered Harmful" 前提 まず、脆弱性の内容を理解するために…

LNDで実装されている経路探索アルゴリズム

LNを利用したオフチェーン支払いをする際、基本的に送信者が受信者までの支払いの経路を決めるようになっている。つまり、送信者はこの経路を探索する必要がある。LNのゴシップネットワークで、LNノードやそのチャネルの情報が(更新を含めて)配信されるの…

TaprootとTLUV opcodeを利用したCovenantsの新しい実現方式

最近、Anthony TownsによってCovenantsの新しい実装方式を提案されている↓ https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019419.html https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019420.html こ…

Output Script Descriptorの基本仕様を定義したBIP-380

Output Script Descriptorは、Bitcoin Core v0.17からサポートされ始めた言語で、ウォレットやその他のプログラムが、自身が所有(関連)するUTXOを追跡するのに必要な情報を含むデータを定義する。 Bitcoinのウォレットの多くはHDウォレットをサポートして…

楕円曲線のスカラー倍算アルゴリズム Part 2

前回の投稿では、楕円曲線のスカラー倍算のアルゴリズムとしてバイナリ法やWindow法のアルゴリズムについて、また射影座標を用いた高速化手法について解説した↓ techmedia-think.hatenablog.com 今回は、もともとスカラー倍算の高速化について調査するきっか…

異なる楕円曲線間の離散対数の等価性の証明

MoneroからBitcoinとMoneroでAtomic Swapが利用可能になったというアナウンスが出ていて↓ https://www.getmonero.org/2021/08/20/atomic-swaps.html そのプロトコルの一部で使用されているのが、異なる楕円曲線間の離散対数の等価性の証明。開発をしているの…

LN Offer

LN Offerは、ノードがLNを介してインボイスを要求、受信できるようにするプロトコルの拡張機能の1つで、BOLTにもBOLT 12として提案されている↓ https://github.com/rustyrussell/lightning-rfc/blob/guilt/offers/12-offer-encoding.md http://bolt12.org/ …

LNのゴシッププロトコルを使った流動性の提供

最近、C-Lightningで実験的にLNのチャネルの流動性(インバウンドキャパシティの提供)をLNのゴシッププロトコルを使って配信する機能がマージされた↓ https://github.com/ElementsProject/lightning/pull/4639 LNの支払いを受ける場合、チャネルにインバウ…

Bitcoin Scriptを使ったランポート署名の検証と量子耐性

最近Bitcoin-Devメーリングリストに、OP_CATを使ってBitcoinに量子耐性をもたせる方法について投稿されてたのが興味深かったので見てみる↓ [bitcoin-dev] OP_CAT Makes Bitcoin Quantum Secure [was CheckSigFromStack for Arithmetic Values] アイディアは…

Schnorr署名とOP_CATを使ったCovenants

Covenantsは、Bitcoinのコインの用途(送り先など)を制限するための仕組み。これまでCovenantsを導入する仕組みの提案がいくつかあったけど、2021年1月にAndrew PoelstraがSchnorr署名とOP_CATを利用したCovenantsの構成を発表しているので、その内容につい…

中継者の協力なしにチャネルの更新を可能にするVirtual Channel

これまで、Multi-Hop LocksやAtomic Multi-Channel Update、Anonymous Atomic Locksなど、多くのペイメントチャネル系の提案をしてきたPedro Moreno-Sanchezが新しいペーパー Donner: UTXO-Based Virtual Channels Across Multiple Hops を発表してたので、…

P2TRの鍵導出仕様を定義したBIP-86

Taprootのアクティベートに向けて、単一の鍵でPay to Taproot(P2TR)にコインをロックする際の、鍵の導出仕様がBIP-86として定義された↓ https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki 単一の鍵なので、対象はTaprootのKey-Path使うケー…