カテゴリー別アーカイブ: 技術記事

異様な発明、アトミック・マルチパス・ペイメントについて

異様な発明、アトミック・マルチパス・ペイメントについて

2月にライトニングネットワークの開発者メーリングリストに投稿された、アトミック・マルチパス・ペイメントが、異様なレベルの発明だと話題になっている。

アトミック・マルチパス・ペイメント=AMP

は、ライトニングネットワークの支払いを改善し、いくつかの批判への回答となるかもしれない発明だ。 続きを読む 異様な発明、アトミック・マルチパス・ペイメントについて

AMPアトミック・マルチパス・ペイメント

ライトニングノードの簡単な立て方

ライトニングノードを簡単な立て方を書きます。

有料版のほうでは使い方ふくめ詳しいレポートを書いたのですが、ここでは簡単な立て方を紹介します。

基本的に、このブログの翻訳です。レポジトリなどこちらのブログの作者のものをそのまま紹介します。

ライトニングはいろんな実装がありますが、bitcoindと親和性の高い、c-lightningを使うことにします。

まず、bitcoindをインストールしてない人は前段階として、bitcoindを入れて、ブロックをすべて同期するひつようがあります。(およそ容量180GBで、12時間ほど要します)

blog作者のDockerをつかった簡単な方法を転載します

blog作者レポジトリに接続

root@docker-s-6vcpu-16gb-nyc3-01:~# git clone https://github.com/dougvk/lightning-node.git

bitcoindのDockerイメージをbuild

root@docker-s-6vcpu-16gb-nyc3-01:~# cd lightning-node
root@docker-s-6vcpu-16gb-nyc3-01:~/lightning-node# docker build . -t dougvk/bitcoind

bitcoindイメージを走らせる

root@docker-s-6vcpu-16gb-nyc3-01:~# mkdir -p /scratch/bitcoin/mainnet/bitcoind
root@docker-s-6vcpu-16gb-nyc3-01:~# docker run --name bitcoind_mainnet -d -v /scratch/bitcoin/mainnet/bitcoind:/data -p 8333:8333 -p 9735:9735 dougvk/bitcoind:latest

こちらのコマンドで同期の状況を確認

root@docker-s-6vcpu-16gb-nyc3-01:~# docker logs bitcoind_mainnet --tail "10"

ネットワークの設定として、ポートは、8333(bitcoin)と9735(lihgtningd)を開けておいてください

bitcoin-cliのショートカットを作ります。
getinfoとやって、うまく情報がでればうごいてます。

root@docker-s-6vcpu-16gb-nyc3-01:~# cat /usr/local/bin/bitcoin-cli
#!/usr/bin/env bash
docker run --rm --network container:bitcoind_mainnet -v /scratch/bitcoin/mainnet/bitcoind:/data dougvk/bitcoind:latest bitcoin-cli "$@"

root@docker-s-6vcpu-16gb-nyc3-01:~# chmod +x /usr/local/bin/bitcoin-cli

root@docker-s-6vcpu-16gb-nyc3-01:~# bitcoin-cli getinfo
{
"deprecation-warning": "WARNING: getinfo is deprecated and will be fully removed in 0.16. Projects should transition to using getblockchaininfo, getnetworkinfo, and getwalletinfo before upgrading to 0.16",
"version": 150100,
"protocolversion": 70015,
"walletversion": 139900,
"balance": 0.00038800,
"blocks": 505216,
"timeoffset": -1,
"connections": 15,
"proxy": "",
"difficulty": 2227847638503.628,
"testnet": false,
"keypoololdest": 1516416352,
"keypoolsize": 1999,
"paytxfee": 0.00050000,
"relayfee": 0.00500000,
"errors": ""
}

さてブロックの同期には12時間はかかるので、寝ましょう。

以上は、Bitcoindのセットアップです。もしすでにBitcoindを走らせているノードをお持ちでしたら、下記のLigtnigdのセットアップからやってください。
ブロックが同期し終わったら、Lightnindをセットアップします。

root@docker-s-6vcpu-16gb-nyc3-01:~# mkdir -p /scratch/bitcoin/mainnet/clightning
root@docker-s-6vcpu-16gb-nyc3-01:~# docker run --rm --name lightning --network container:bitcoind_mainnet -v /scratch/bitcoin/mainnet/bitcoind:/root/.bitcoin -v /scratch/bitcoin/mainnet/clightning:/root/.lightning --entrypoint /usr/bin/lightningd cdecker/lightningd:master --network=bitcoin --log-level=debug

ログがでるかどうか確認

...
lightningd(1): Hello world from 03e71ed1bbedcf41d97e06ef3dfe4cdf79e871e9a3c809ab32b78e71dea45bf78c aka SLICKERGOPHER #03e71e (version v0.5.2-2016-11-21-1414-g5eceaa7)!
...
lightningd(1): Adding block 00000000000000000055234efac33e0ea30cc8e84ded7997f9e434534fd6f1bb
lightningd(1): Adding block 0000000000000000006fcfbab65ccb4634a800c5b12913b8379e6704b42db663
lightningd(1): Adding block 0000000000000000003f350dcff4fa5b1df61355cd80e9b06be55654d6384518

Lightning-cliのショートカットを作成します

#!/usr/bin/env bash
docker run --rm -v /scratch/bitcoin/mainnet/clightning:/root/.lightning --entrypoint /usr/bin/lightning-cli cdecker/lightningd:master "$@"

root@docker-s-6vcpu-16gb-nyc3-01:~# chmod +x /usr/local/bin/lightning-cli

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli getinfo
{ "id" : "03e71ed1bbedcf41d97e06ef3dfe4cdf79e871e9a3c809ab32b78e71dea45bf78c", "port" : 9735, "address" :
        [  ], "version" : "v0.5.2-2016-11-21-1414-g5eceaa7", "blockheight" : 505236 }

これも、lightning-cli getinfoとやって、ノードの情報が表示されればOk

以下から、ライトニングの操作です。

ライトニングのウォレットのアドレスを作成。

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli newaddr
{ "address" : "3Dx1XCcBsTtUQmWW6KD8PfMx6fB9saejYM" }

上記にビットコインをいくらか入金してください。6 confirm 後に、ウォレットにあるかどうか確認できます

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli listfunds
{ "outputs" :
[
{ "txid" : "[HIDDEN]", "output" : 0, "value" : 300000 } ] }

他のノードに接続してみましょう。ノードは、https://lnmainnet.gaben.win/とかのライトニングのマップで調べるのがよいです。
よくわからければ、おすすめノードに接続してみてください。

blog作者のノードは、SLEEPYARKという名前で、

私のノードは、ln.inazuma.ccです。

Screenshot from 2018-01-30 22-08-45

以下、私のノードのpub idとIPを載せておきます。

ln.inazuma.cc:
pub key :
03dcd840ff15d19792e8a8d704bbbbafc629c22324f0d002d8f4cc87c8798f03ef
IP: 133.18.56.130

接続するには、connectとします。

%lightning-cli connect 03dcd840ff15d19792e8a8d704bbbbafc629c22324f0d002d8f4cc87c8798f03ef 133.18.56.130
{ "id" : "03dcd840ff15d19792e8a8d704bbbbafc629c22324f0d002d8f4cc87c8798f03ef" }

で接続できます。ノードIDが帰ってきたらOK

(手数料は手動設定しなくても、問題ないですが)、デフォルト値があまりに低くすると、チャネルが閉じられないく成る可能性があるので、適時リーズナブルな値に設定すること。

root@docker-s-6vcpu-16gb-nyc3-01:~# bitcoin-cli settxfee 0.0005

次にチャネルにBTCをデポジットします。

%lightning-cli fundchannel 03dcd840ff15d19792e8a8d704bbbbafc629c22324f0d002d8f4cc87c8798f03ef 100000

指定する金額の単位は、Satoshiです。ここでは、10万サトシつまり、1000円くらいデポジットしてます。

手数料の状況ではコレだと足りないかもしれないので、適時増減してください。

ここで、チャネルが確立するまで、6 confirmまってください。

%lightning-cli  listnodes

で、チャネルの状況がモニターできますので、CHANNEL_NORMAL、CONNECTEDとなっていれば、チャネル確立完了

支払いの方法ですが、BOLT11のペイメントコードを取得してください。

ためしにブロックストリームストアかなにかなで何か買うのがいいかもです。
https://store.blockstream.com/

Screenshot from 2018-01-30 22-05-59
こういう奴です。

で、

%lightning-cli pay lnbc1712393610p1pdx8n8mpp5c72tc40vzyf9deqm5lzn76404heejady02l494ykke3vm3x44y8qdy2gfkx7cmtwd68yetpd5azqv339cunvgz42dzzqen0wgsyymr0vd4hxarjv4sk6gznv96x2mrvd96x2grnw35kx6m9wgs8sgp5ypskuepqf35kw6r5de5kueeqwd6xjcmtv4ezq7pqxvcqpggq86huylgdcd4st0d8thgdlw67tefjkhrnssyf8zk2s9cu37hdanwm6q96llg5zgjckwe7jamsmxnp4vy4q7vyulv57d9yg0wm7df0cpgwgu2m

とかやれば、支払いできます。

以上です。

有料サロンの方では、ブログ翻訳ではなく、c-lightningをソースからビルドする方法で、詳しくコマンドの使い方など含め書き起こして解説していますので、ご興味があれば、こちらからよろしくねがいします。

【レポート096】ライトニングネットワークスタートマニュアル(ノードの立て方、チャネルの貼り方、支払いまで)

 

サイドチェーンについての簡潔な解説

最近は、ライトニングネットワークや、サイドチェーンといった2ndレイヤーと呼ばれる技術に注目が追いついてきました。簡単に解説をしていこうとおもいます。

サイドチェーンについて書きます。

Blockchain-side-chain

図(https://blockgeeks.com/guides/blockchain-wiki/)

サイドチェーンとは、メインチェーンとは別にもうひとつのブロックチェーンを勝手につくって、メインチェーンとPegと呼ばれる手法に相互運用性をつくることで、メインチェーンには無かった機能を追加したり、手数料や承認時間をゼロに近づけたりと、独自のチェーン設計と運用が行えるようにするものです。

上の図で言うと、左の丸がメインチェーン(BTCのチェーンなど)、右の丸がサイドチェーンで、真ん中の黒い双方向の矢印が、ペグという手法を指します。

ざっと解説すると、こうなります。

  1. サイドチェーンは、メインのチェーンとは別のチェーンで、許可無く設置可。パブリックでもプライベートでも可。
  2. サイドチェーンのマイナーはメインのチェーンとは別。
  3. サイドチェーンの合意アルゴリズムはメインチェーンと違ってよい。特に、プライベートの場合、マイニングを要さずPOSやPBFTなどのマイニングを要さない高速アルゴリズムを利用することもできる。
  4. メインチェーンから、サイドチェーンにコインを移すことができる。たとえば本物のBTCを、サイドチェーンに移すとBTCがメインチェーンでロックされて動かせなくなり、サイドチェーン側で新しくサイドチェーン内BTCが生成される。
  5. サイドチェーンのコインは、メインチェーンから移動させることによってのみ生成される。
  6. このサイドチェーンBTCは本物のBTCではないが、サイドチェーン内の合意によりBTCの代替物として利用できる。
  7. サイドチェーンのBTCは、メインチェーンに戻すことができ、その場合、サイドチェーンのコインは消失し、メインチェーンでロックされていたコインが再びつかえるようになる。
  8. 4〜7の仕組みを2way peg(双方向ペグ)といい、サイドチェーンの肝になる仕組み。

という感じです。

サイドチェーンの何が嬉しいかですが、

  1. メインチェーンの機能の拡張とかは、全員が合意しないといけなかったり、セキュリティが低下したりするとこまったりで、なかなか難しい。
  2. サイドチェーンの設計は自由なので、ブロックタイムを短くしたり、匿名性をもたせたり、スマートコントラクトが利用できるようにしたり、ニーズに応じたものが自在に設計できる。ペグしたBTCをそこで動かすことができたらとても便利。

まあ新たにアルトコインなんかつくらなくても、サイドチェーンでいろいろできるよってことで。

次にいくつかの疑問点にお答えすると。

Q サイドチェーンのセキュリティはメインチェーンより落ちるのでは?

→そのとおりで、利便性や多機能とセキュリティはトレードオフになるのが一般論。ビットコイン自体のセキュリティを緩めるんじゃなくて、サイドチェーン利用で、利用目的にあわせて、セキュリティと機能は選べるようにしようということ。(for diffent purpose, different security and consensus model.)

Q もしサイドチェーンで不正などがおきてサイドチェーンコイン内のコインが増えちゃったり、改ざんされた場合、それをメインチェーンに戻したら、メインチェーンのコインも不正できるの?

→No. サイドチェーンが壊れたら、メインチェーンにロックしているBTCが取り出せなく成る。サイドチェーン内でも不正は困ったことに。

Q 実用化されているサイドチェーンは?

→Ethereumライクなスマートコントラクトが使えるRSKという再度チェーンがベータ版をローンチ。その他、取引所間のプライベートサイドチェーンであるLiquidなどがある。

 

 

ライトニングネットワークの簡潔な解説

download

最近は、ライトニングネットワークや、サイドチェーンといった2ndレイヤーと呼ばれる技術に注目が追いついてきました。簡単に解説をしていこうとおもいます。

ライトニングネットワークについてです。

いろんな説明があるのですが、手数料無料、早いといったユーザーベネフィットの話からのものが多いと思いますが、すこし別の切り口から説明してみます。 続きを読む ライトニングネットワークの簡潔な解説

Segwitの状況についての基礎理解と再整理をしてみました(UASF/Segwit2x)

Segwitのデプロイ関係を、もういちど簡潔にわかりやすく解説してみようと思う。

プロトコルの仕様それ自体、デプロイメントメソッド、推進体制、この3つがごっちゃになっているので、非常にわかりにくい。これを切り分けて整理する。 続きを読む Segwitの状況についての基礎理解と再整理をしてみました(UASF/Segwit2x)

Segwit2xの現状と、BIP91について

Segwit2xがめまぐるしく動いているようだ。現在は、NYAという文字をブロックに埋め込むことでマイナーが支持を表明しており、80%を超えている。

現在の状況については、Jimmy song氏のブログがわかりやすいまとめになっているので、これの要点を引用しながら、解説する。 続きを読む Segwit2xの現状と、BIP91について

ASIC BOOSTの手法と対策について

昨日からASIC BOOSTについての話題でビットコイン界はもちきりである。

ASIC BOOSTは、ビットコインの仕様と、SHA-256関数のアルゴリズムの特徴を上手く使うことにより、計算コストを20−30%節約することができるという手法である。

以下、ASIC BOOSTとその対策について、できるだけ簡単かつ簡便に解説する。

続きを読む ASIC BOOSTの手法と対策について