2017/05/07

[bc]segwitのTXID

連休にもかかわらず、書けるような記事が何もない。。。
これではまずいので、困ったときのBitcoinネタを出そう。

 

ビットコイン分裂騒動は「レイヤー2」への反動か | TechCrunch Japan

SegWitを前提としないLightning Network実装は理論的には可能だが、開発者にとって「やりたくない仕事」なのだそうだ

あははは、うまい表現だ。
最初に「segwitなしでLN(LightNing)」という話を聞いたときは、おお!そんなことが!、と思ったけど、どうやって実現するのかを読んでいく途中で「あー、私にはむりー」となってしまった。
(2017/05/10:Lightning Network、の方がふさわしいな。)

 

基本的に、Bitcoinのやりとりは、誰も信用しない、というところを重視していると思っている。
trustless、というやつだ。
現金をBitcoinに替えたりする場合は知らんが、Bitcoinの中だけでもそうなるように苦慮している。
ときどき「そこまでするの??」というような内容もあるのだけど、理論的にツッコミできないので、そういうものかとあきらめている。

雰囲気としては、Bitcoinは秘密鍵とデジタル署名で成り立っている。
もちろん、ブロックチェーンというだけに、ブロックのもつ役割は大きいのだけど、ブロックは何からできているかというとBitcoinの価値を移動させるトランザクションで、トランザクションは秘密鍵でデジタル署名することになっているのだ。

 

トランザクションは、それぞれを識別するIDが付いている。
これが「トランザクションID」(TXID)というやつだ。
どこか中央のサーバがあれば、そこが一意になる値を付ければよいのだが、Bitcoinでは中央がいないので、一意になるような値をがんばって付けなくてはならない。
連番にしてしまうと、ネットワークの転送時間などもあって、同時に同じ番号を付けられてしまうこともあるだろう。
だからだと思うが、トランザクションIDはトランザクションの中身を使って算出するようになっている。
ハッシュ値、というやつですな。

 

そのトランザクションIDの計算をする方法が、非segwitとsegwitで異なる。
非segwitの場合は、トランザクションの中身だけで計算できた・・・と思う。
しかしsegwitの場合、従来の計算方法を使ったIDの算出方法と、新しい計算でのID算出方法がある。
そして、非segwitのトランザクションIDと同じ位置にいるのは、新しい計算でのIDの方である。

 

新しい計算方法の特徴は、

  • そのトランザクションのINPUTがいくらのBitcoin量(amount)だったかを計算に含める
  • そのトランザクションのデジタル署名は計算に含めない

だと思う。
前者は、確かトランザクション展性という脆弱性に対応するため(だったと思う)。
最初の記事に出てくる「レイヤー2」にとっては、後者の方が欲しい。

2017/05/10追記
この計算方法は、署名についてだった。。。
TXIDについてはトランザクションの中身だけで計算できるが、計算に含める部位と演算方法が違う。
その部位に署名(witness)が入らないため、TXIDは署名をする前に計算できる。

なお、WTXIDというものもあり、これは従来と同じ計算方法のため、署名もひっくるめてハッシュ計算している。

記事を読んでいると「チャネル」という言葉がしばしば出てくると思う。
これは「私とあなただけがやりとりする口座」みたいな意味だ。
テレビやラジオのチャンネルよりも、Amazonなどのログインアカウントみたいな意味合いの方が強いかな。

Bitcoinで口座に相当するものといえばBitcoinアドレスになるが、ここは「私とあなた」なので、2-of-2のmultisigアカウントを作ることになる。
Bitcoinのアカウントを作るだけなら何とでもできるが、それをBlockchain上に見えるようにするには、既にあるトランザクションからそのアカウントに送金してもらうことになる。
だから、レイヤー2のアカウントを作る=そこに入金する、ということになる。

が、2-of-2のmultisigに入金するということは、2人ともデジタル署名をしないとお金を取り出せないということでもある。
もし相手が偽物だったり、入金した後に逃げられて取り戻せなくなったりするのでは・・・・という心配が残る。
これが、「trustless」が重視される理由だ。
相手が悪いことをしても、少なくとも自分は損をしない、下手をしたら悪いことをした人が損をする、というくらいのことを、計算上で実現させるようにしている。
計算上というか、Bitcoinの支払いスクリプトで、そうなるようにがんばっているのだ。

相手から署名してもらわなくてもTXIDが計算できるということは、multisigへ入金したとして、そこから自分に取り戻すトランザクションを署名無しで作ることができるという意味でもある。
そこまで保険を掛けておけば、取り戻すトランザクションが手元にあるので、相手が逃げるかどうかはわからないけどチャネルを開いても少なくとも損はしない、という安心感が得られる。

 

こういう、異常系というか純正常系というか、そういう部分がレイヤー2の大半を占めるので、けっこう大変なのだよ。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。