Yuya

Yuya

@ogw_yuya

ちょビットコイナー nostr id: npub1l83ycz54gng3nd8suvww43fardjsca37x7z5rcwlmeqzudg027fqe9hwaa

サトシの受け取りはバケツで

ウォレットをバケツにたとえた説明は分かりやすい。もし受け取る水がバケツから溢れる場合、バケツを大きなものと取り換える。この際、オンチェーンへの書き込みが発生する。以前までは、バケツから溢れる場合、新たにバケツを用意していたが、スプライシングを使うことでバケツを大きなものと取り換え、常に1つのバケツを保有しているだけでよい。 ※ウォレットをバケツにたとえているが正確にはチャネル <iframe id="twitter-widget-0" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="allowfullscreen" class="" style="position: static; visibility: visible; width: 550px; height: 417px; display: block; flex-grow: 1;" title="Twitter Tweet" src="https://platform.twitter.com/embed/Tweet.html?dnt=true&embedId=twitter-widget-0&features=eyJ0ZndfdGltZWxpbmVfbGlzdCI6eyJidWNrZXQiOltdLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X2ZvbGxvd2VyX2NvdW50X3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0ZndfdHdlZXRfZWRpdF9iYWNrZW5kIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH0sInRmd19yZWZzcmNfc2Vzc2lvbiI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfZm9zbnJfc29mdF9pbnRlcnZlbnRpb25zX2VuYWJsZWQiOnsiYnVja2V0Ijoib24iLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X21peGVkX21lZGlhXzE1ODk3Ijp7ImJ1Y2tldCI6InRyZWF0bWVudCIsInZlcnNpb24iOm51bGx9LCJ0ZndfZXhwZXJpbWVudHNfY29va2llX2V4cGlyYXRpb24iOnsiYnVja2V0IjoxMjA5NjAwLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3Nob3dfYmlyZHdhdGNoX3Bpdm90c19lbmFibGVkIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvb

ビットコインがチューリング完全に対応!?任意のプログラムを実行検証するBitVMとは

BitVMはビットコイン上で任意のプログラムを実行したかを検証するプロトコル。現状のビットコインは限られたプログラムしか実行できないが、BitVMを使うことで任意のプログラムを実行できる。ただし、このプログラムが実行されるのはビットコイン上ではなく、オフチェーン上で実行される。その実行結果が正しいかの検証をビットコイン上で行う。もし実行結果が間違っている場合、Fraud Proofを使って資金を没収することができる、というのがBitVMの仕組み。 BitVMの提案書はページ数も少なく内容も難しくないのでこちらの原文を読むのがおすすめ。日本語での解説記事はこちら。 論理回路コミットメントという発明 BitVMではBit Value Commitmentという0または1を出力するためのプリイメジハッシュをそれぞれ構成する。これをOP_BITCOMMITMENTと呼ぶ。 #Bit Value Commitment OP_IF OP_HASH160 <hash1> OP_EUALVERIFY <1> OP_ELSE OP_HASH160 <hash0> OP_EUALVERIFY <0> OP_ENDIF 次に、NAND回路を構成するが、これは既存のビットコインスクリプトであるOP_BOOLAND, OP_NOTを使うことで簡単に構成できる。これをOP_NANDと呼ぶ。 #OP_NAND OP_BOOLAND OP_NOT OP_BITCOMMITMENTとOP_NANDを使ってLogic Gate Commitment(論理回路コミットメント)を構成する。これもプリイメジハッシュをセットすることで論理回路にコミットする。0または1に対応するプリイメジを公開することで論理回路の出力を制御することができる。 //Cのビット値をALTSTACKへ退避 OPBITCOMMITMENT OPTOALTSTACK //Bのビット値をALTSTACKへ退避 OPBITCOMMITMENT OPTOALTSTACK //Aのビット値をSTACKへセット OP_BITCOMMITMENT //Bのビット値をSTACKへセット OP_FRO

RGB-Channel in Lightning

ライトニングネットワークはビットコインをオフチェーン上で送金する仕組みである。そのネットワークを構成するペイメントチャネルは2者間のビットコイン残高の状態を管理している。このチャネルの状態にビットコイン残高以外の特性を持たせようとする取り組みがいくつかある。 RGB-Channel in Lightning ビットコイン以外のトークン残高を管理できるようにするチャネル Lightning Network compatibility - RGB Docs DLC-Channel in Lightning 残高はビットコインのままだが、残高状態を更新するために必要な二者間の署名以外にオラクルの署名も有効とするチャネル DLC on Lightning. TLDR; | by Thibaut Le Guilly | Crypto Garage | Medium 今回はRGBチャネルに焦点を当ててその実用性を考察してみる。 RGBチャネルのプロコン RGBチャネルの場合、チャネル開設者がアセットを持ってさえいればよい。これはRGBチャネルのメリットである。なぜなら、RGBのオンチェーン送金では受け取り側もUTXOを事前に用意する必要があるから。RGBチャネルを開設さえすれば、受け取り側はLN上で0承認かつ低手数料で何度も送受信が可能で、アセットをオンチェーンへ引き出す際はチャネルを閉じるだけでよい。 現状のRGBチャネルは1チャネル1アセットなので、複数アセットを扱う場合、それぞれのチャネルを開設する必要がある。そのため、受け取りたいアセットのチャネルがない場合は受け取ることができない。RGBチャネルが普及する場合、特定のアセット、例えばUSDTなどのチャネルに限定的になる可能性が高い。 チャネル間を通してアセットを送金する方法は、分散ネットワーク型、ハブ&スポーク型、ゲートウェイ型の3通りある。RGBチャネルが普及する場合、特定のアセットに限定的になる可能性が高いので、その場合は分散ネットワーク型になる可能性もあるが、取引所やLSPなどがゲートウェイとしてRGBチャネルを運用する未来像の方がイメージしやすい。

SphinxプロトコルにHMACを追加する理由はリプレイ攻撃対策

ライトニングネットワーク上の送金はプライバシー向上のためにオニオンルーティングが使われている。そのプロトコルとしてSphinxプロトコルをベースとしているが、そこにHMACがなぜ追加されているのか、以下のLNメーリスに回答があったので、その備忘録。 [Lightning-dev] Reason for having HMACs in Sphinx (linuxfoundation.org) オニオンルーティングのペイロードのラップ、アウンラップについては以下のサイトが参考になるので、それをもとに以下、詳細を割愛しながら説明する。 lnbook/10_onion_routing.asciidoc at develop · lnbook/lnbook (github.com) オニオンペイロードのラップ・アンラップ オニオンペイロードは送信者によって構成される。このペイロードは1300バイトの固定長である。例えば、A→B→C→Dという経路で送信する場合、AはまずDへの情報をセットし、残りのスペースを1300バイトになるまでフィラーで埋め、Dとの共有鍵から生成したrho鍵でXORしてペイロードを暗号化(難読化)する(1)。次にCへの情報をセットし、暗号化したデータ(1)を追加する。この時、1300バイトを超過したデータは切り捨て、Cとの共有鍵から生成したrho鍵で全体を暗号化する(2)。次にBへの情報をセットし、暗号化したデータ(2)を追加する。この時も1300バイトを超過したデータは切り捨てて全体を暗号化する(3)。こうして入れ子になったデータをオニオンペイロードと呼ぶ。 Aはこのオニオンペイロードの先頭にBとのセッションキー(※1)をセットしてBへ送信する。Bはオニオンペイロードに1300バイトのゼロ埋めされたフィラーを追加して、共有鍵を使い2600バイトのペイロードを復号して(先頭1300バイトが復号され、残りの1300バイトは難読化される)、自身のペイロードを切り取る。残ったペイロードを左へシフトして、1300バイトを超過するデータを切り捨てる。Bはこのオニオンペイロードの先頭にCのためのセッションキーをセットしてCへ送信する。Cも同様にペイメントの先頭に1300バイトのフィラーを追加してから共有鍵を使いペイロードを復号して自身のペイロードを切り取る。残ったペイロードを左へシフトして、1300バイトを超過するデータを切り捨てる。Cはこのオニオンペイロードの先頭にDのためのセッションキーをセットしてDへ送信する。Dも同様な処理を行い、自身のペイロードからこの送金

Eltoo: SIGHASH_ANYPREVOUTによるバインディング技術

Eltooはペイメントチャネルの残高更新の仕組みを簡素化する仕組みです。現状のライトニングネットワークに使われているペイメントチャネルはペナルティ型で、一方が不正をすると他方が全額没収することができる仕組みになっています。ペナルティ型のペイメントチャネルは、残高が更新される度にその更新に使われた鍵情報(revocation key)を保存する必要があり、データ容量を圧迫してしまいす。Eltooでは最新の残高に関するデータのみ保存するだけでよくなります。 Eltooの実現にはBIP118のSIGHASH_ANYPREVOUTと呼ばれる新しいSIGHASHタイプが必須で、ソフトフォークが必要です。Eltooの俯瞰図は以下が詳しいです(eltoo with Anyprevout and Taprootより抜粋)。またこちらの記事も日本語で詳しく解説されています。 Eltooでは、チャネルのライフサイクルを3つに分けて考えます。 セットアップ:funding_txとupdate_txを作る ネゴシエーション:update_txとsettelment_txを作る セトルメント:協調的な場合はclose_txを作り、非協調的な場合はupdate_txとsettlement_txをブロードキャストする ネゴシエーションは送金をする度に実行されます。ここで重要なのはupdatetxが消費できるtxは複数あることです。上図のUpdate:3を見ると、そのtxが消費できるtxはFunding:0、Update:1,Update:2の3つあることが分かります。現状ではtxに署名をする場合、そのtxが消費するtxをインプットとして指定する必要があります。しかしSIGHASHANYPREVOUTではインプットを指定することなく署名できるようになるので、どのtxに対しても有効な署名済みtxになります。そのため、もし相手がSettle:1の残高でセトルメントを実行しようと思いUpdate:1を

ペイメントチャネルのサイズ変更をするスプライシング(Splicing)

Splicingはペイメントチャネルのサイズを変更するための仕組みです。サイズを小さくする場合はSplicing-out、大きくする場合はSplicing-inと呼んだりします。現状のLNでチャネルのサイズを変更するには、一度チャネルを閉じて開き直す必要があり、これには2つのトランザクションが必要になります。Splicingを使うことでこのトランザクションを1つに纏めることができます。さらに、というよりこれが要点ですが、Splicingでチャネルサイズを変更している間(この新しいチャネルが未承認の場合)でも、既存のチャネルでルーティングを継続することができます。 既存のチャネル(これは閉鎖中のチャネルとも呼べる)と開設中のチャネルが共存するなか、どうやってルーティングをしているかというと、既存のチャネルのコミットメントにHTLCが追加・削除される場合、開設中のチャネルにも同じ金額のHTLCを追加・削除します。このHTLCは両コミットメントに共存していますが(コミットメントはオフライン上のデータであることに注意)、HTLCがオンチェーンに展開される場合、最終的にブロックチェーンに刻まれるのはどちらか一方なので、チャネル間の残高の整合性は担保されます。 Splicingの仕様は以下リンクに詳しいです。 Splice draft (feature 62/63) by rustyrussell · Pull Request #863 · lightning/bolts (github.com) Alternative splicing specification proposal with detailed examples (github.com) また、Splicingではinteractive-txと呼ばれる新しい仕様も必要になり、その仕様は以下のリンクに詳しいです。 interactive-tx: Add dual-funding flow, using the interactive tx protocol (feature 28/29) by niftynei · Pull Request #851 · lightning/bolts (github.com) interactive-txは、チャネル開設時にOpenerだけでなくAccepterにもfundingtxのためのインプットを追加できるようにするもので、より柔軟にfundingtxを構成

記事を購入しました。 mic51u97c

-100

まっく さんが記事を購入しました。 4y36jovbt

100

ルノルミン さんが記事を購入しました。 ornqcqdwx

1000

記事を購入しました。 dwepzth0k

-100

記事を購入しました。 ac6ahki0y

-100

sutadonman さんが記事を購入しました。 6jphw1e6d

100

Anonymous さんが記事を購入しました。 5gln96sgo

100

Anonymous さんが記事を購入しました。 4y36jovbt

100

リリア さんが記事を購入しました。 upde8nsu0

1000

記事を購入しました。 u3sejrl0d

-100

高井 さんが記事を購入しました。 wyy4tqhec

100

リリア さんが記事を購入しました。 xlco5hfc6

1000

btc_dakara さんが記事を購入しました。 wyy4tqhec

100

tanakei さんが記事を購入しました。 wyy4tqhec

100

記事を購入しました。 f412hadez

-1000

記事を購入しました。 e2ddss353

-100

記事を購入しました。 lly0arc5w

-100

記事を購入しました。 3oq9jfvtz

-100

culizusi さんが記事を購入しました。 4y36jovbt

100

Yuya さんから投げ銭がありました。

100

このクリエイターの人気記事

LNノードの運用益はどれぐらい?パート1

1817

【Muun】ちょっと変わったライトニング搭載ノンカストディアルウォレット

1473

LNノードの運用益はどれぐらい?パート3

1092

アーカイブ

2023-11
1記事
2023-10
6記事
2023-09
5記事
2023-08
3記事
2023-07
2記事
2023-06
6記事
2023-05
8記事
2023-04
3記事
2023-03
1記事
2023-01
2記事
2022-12
5記事
2022-11
2記事
2022-10
2記事
2022-09
1記事
2022-08
5記事
2022-07
4記事
2022-06
1記事
2022-05
4記事
2022-04
3記事
2022-03
2記事
2022-02
3記事
2022-01
2記事
2021-10
2記事
2021-09
5記事
2021-08
5記事
2021-07
9記事
2021-06
2記事
2021-05
4記事
2021-04
9記事
2021-03
11記事
2021-02
5記事
2021-01
4記事
2020-12
8記事
2020-10
2記事
2020-09
20記事
2020-08
4記事
2020-07
5記事
2020-06
10記事
2020-05
7記事
2020-04
10記事
2020-03
3記事
2020-02
3記事
2020-01
6記事
2019-12
6記事
2019-11
5記事
2019-09
1記事
2019-08
1記事
2019-07
1記事
2019-05
4記事
2019-04
7記事
2019-03
4記事
2019-02
5記事