ビットコインの情報サイトの運営者ブログ

サイトには掲載していない仮想通貨に関する時事的な情報や個人的な感想など。中級者以上向け。

ビットコインの最適な取引手数料を決める方法

早いもので今年もそろそろ終わりです。新しいことはここ数か月全然調べられていないので、今更な話ですが取引手数料について。

もしかしたら有名な内容で、このブログを見ているような人はみんな知っているかもしれませんが、一応書いておきます。

背景とか

正確な原因は諸説あるものの、最近はビットコインの値上がりとともにビットコインのトランザクションが大混雑状態になり取引手数料も高騰しています。

ほとんどのウォレットソフトが自動で手数料を計算しているので、少し前はそれに任せて全然気にする必要なかったのですが、最近は数千円手数料がかかることが当たり前になってきたので、少しでも安くならないものかと思うことが増えてきました。

実はウォレットソフトのほとんど(すべて?)の手数料計算はあまり精度がよくなく、実際に必要な手数料よりも多めの手数料を提示しており、手動で手数料を設定したほうが良い場合が多くあります(あまりぎりぎりの手数料を提示しても今度は送金が完了しないというトラブルが頻発するので、納得はできる仕様)。

いずれにせよ安めに送るにしても高めでもいいから確実に送るにしても、最適な取引手数料を設定するには手動で設定するしかないのが現状なので、今回はそれについての記事です。

手数料計算サイト

このブログの過去の記事でも触れたことがあり、手数料予測のサイトのなかでおそらくもっとも有名なのが以下のサイトですが、実際にはあまり精度は高くないような気がします。

Bitcoin Fees for Transactions | bitcoinfees.earn.com

少し前はどんなに高くてもせいぜい数百円程度だったので、上のサイトでも十分だったのですが、最近は手数料をできるだけ低く抑えたくなるぐらいの高さなので、より正確に最適な手数料を求める必要がでてきました。

ちなみに他の手数料予測のサイトも軽く調べてみましたが、よさそうなところはありませんでした。

そこで最近使っているのが以下のメモリプール内にあるトランザクションを手数料別にソートしてサイズを表示してくれるサイトです。

メモリプールの状態を見る

jochen-hoenicke.de

f:id:jpbitcoin:20171230153021p:plain

 

 手数料を決める時はこのサイトの一番下の「Mempool Size in MB」のグラフを見て決めます。ブロックが採掘される毎に1MB+α分だけメモリプールのトランザクションが引かれるのが通常ですので、手数料を決める際は、上のトランザクション数とか手数料の合計額のグラフよりも、サイズを直接見るのが最も良いです。

グラフ内にカーソルを合わせると各手数料別のサイズが表示されます。large mempoolだと累積のサイズも表示されるのでそちらを選択するのが良いかも知れせん。more stripeを選択すると手数料の区分が細かくなります。

f:id:jpbitcoin:20171230153427p:plain

例外もありますが、通常は手数料の高いトランザクションから順番に処理されていきますので、このデータだけを見ると、次のブロックに入るのはどの手数料か予測することができます。

画像の場合ですと500+satoshi/byteで1.6MBのトランザクションが累積されているので、500satoshi/byte以上の手数料を設定しないと1ブロック以内に送金完了させるのは難しいことが予測されます。また、連続でブロックが生成されるようなこともありますので、400+の手数料でも可能性は高そうです。

このデータだけを見ているとちょっとわかりにくく、かといって今のようなメモリプールが大混雑状態になるときはグラフは上の部分が小さすぎてわかりにくいので、そういうときは左の凡例部分をクリックさせて上のほうを拡大するのがおすすめです。

f:id:jpbitcoin:20171230154030p:plain

上は100以上の凡例の部分をクリックしたときのグラフです。こういうグラフだとメモリプールの状態がわかりやすいです。今日の6時過ぎに100-120のトランザクションがブロックに入ったのを最後にメモリプール内のトランザクションは増加傾向にあります。

300帯以下のトランザクションが10時間近くブロックに入っていないようなので、300satoshi以下で送ってしまうと、このままトランザクションが増加しつづけていった場合、下手すると何日も送金が完了しない可能性が予測されます。

逆に300-400帯は何度か上のほうがブロックに入っていますので、この手数料帯なら数時間以内に送金完了する可能性が高まってくるということになります。

400-500ならさらに可能性は高くなりますし、500+なら確実に数ブロック以内に完了しそうな感じがします。

増加傾向にあるのも考慮して、すぐに送金完了させたい場合は、自分なら500satoshi/byteくらいに設定すると思います。

なにかの法則とか形式にしたがって手数料を算出する・・・というよりは、グラフとデータを見て直感的に決める感じなので、解説もしにくいですが、皆さんも実際に見ながら設定してみるとわかってくると思います。

注意点とか

軽く注意点とか。

  • メモリプールというのはノードごとに別々に構築されるものです。ネットワーク上のラグの影響やメモリプールの設定等によってメモリプール内のトランザクションの内訳は異なってくるので、このサイトのトランザクションの手数料の高い順から正確に1MB(+α)引かれていくわけではありません(マイナーが手数料の低い自分や友達のトランザクションを優先してブロックに含めるとかいったこともあり)。そのため、2番目の画像内のデータというよりは、3番目の画像のグラフの形から感覚的に手数料を決めることの方が重要ですし分かりやすいです。
  • サイトが接続しているビットコインノードが、一時的にシャットダウンするなどしてネットワーク上の他のノードとは大きく違うメモリプールになる可能性もあります。このサイトはオープンソースですので、もしフルノード運用している人がいたら、自分のノードのメモリプールも見れるようにして、二つのメモリプールを同時にみるとより確実でしょう。
  • 安く手数料を済ませかつ確実に送金完了させたい場合は、低めに手数料を設定しても後から手数料を追加できるRBF(Replace-By-Fee)機能が使えるウォレットを使うのが良いです。

 さいごに

ということでこれが今年最後の記事でした。最近はブログ記事にあまり力を入れられていないので、来年はもっと頑張りたいところではありますが、サイトのほうの情報もだいぶ古くなっていて使えないサイトになりつつあることもあり、しばらくはサイトの更新に注力するつもりです。

今までのように月1更新を目標にするのはやめてしまいますが、ブログは広告も入れてない完全趣味な感じでやっていますのでお許しください。また書きたい欲が出てきたら頻繁に更新するようになるかもしれません。

それでは皆さん良いお年をお迎えください。

Electrum3.0系でP2SHのSegwitウォレットを管理する方法

時事ニュース的な内容は他のところにまかせてマイペースに更新。今月頭にElectrumの3.0がリリースされ、Trezor、Ledger、GreenAddressに次ぐSegwit対応ウォレットとなりました。

Electrum3.0のSegwitウォレットは先月の記事でも軽く触れたとおり、bech32というbc1からはじまる新しい形式のアドレスであり、未対応のウォレットからは送金できません。現時点ではまだ多くのウォレットや取引所などが、bech32のアドレスへの送金には対応していないと思われ、ElectrumのSegwitアドレスをメインに使っていこうとするのは、あまりおすすめできません。

そこでElectrumで3からはじまるP2SHのSegwitアドレスを管理してみようというのが今回の記事です。

Trezor・LedgerとBIP49

まずは前提知識的な内容をかなり大雑把に解説。ハードウェアウォレットのTrezorやLedgerではすでにSegwitが導入されていますが、それにより従来の「Legacyアカウント」と新しい「Segwitアカウント」の二種類のアカウント・アドレスが生まれることになりました。既に持っている方は分かるかと思いますが、新しいアカウントが生まれたといってもアドレス群の作成元となるseed、つまり24単語の復元フレーズは全く変わっていません。

このSegwitアドレスの作成方法を規定しているのがBIP49です。これは、去年解説記事を書いたBIP32やBIP44の派生的なBIPであり、詳細は去年の記事を参照してもらえればと思います。BIP44は一般的には「m/44'/0'/0'」という方法・ルートでビットコインウォレットが作成されるのに対し、BIP49は「m/49'/0'/0'」というルートで作成されます。

つまり、Trezor・Ledgerの場合、同じ24単語の復元フレーズからBIP44のルートで作成したアドレス群が「Legacyアカウント」、BIP49のルートで作成したアドレス群が「Segwitアカウント」になっています。

ElectrumとBIP39

BIP44やBIP49というのは、基本的に12~24単語の英単語等、特定の単語群・seedをもとにアドレスを作成するものですが、その単語リストや単語の組み合わせ等を規定したのがBIP39です。

BIP39は非常に多くのウォレットで採用されていますが、ElectrumはBIP39にバージョン番号が規定されていないこと等欠陥があるとして批判しており、BIP39を採用しておらず独自のシステムを利用している珍しいウォレットとなっています。このため、Electrumのseedを他のウォレットで使うことはできません。

ちなみにBIP39については、Bitcoin Coreの開発者にも批判している人が多くおり、Bitcoin CoreのHDウォレット化自体はされたものの、BIP39は採用されていません。ほとんどのウォレットで採用されながらも欠陥があるとして批判されているBIP39の議論もなかなか面白いので、機会があればいつか記事にしてみたいと思います。

Electrumで3からはじまるP2SHのsegwitアドレスを管理

ここからが本題。ElectrumはBIP39を採用していない・・・とはいっても実は他のウォレットで作成されたBIP 39 seedのインポートには対応しています。この外部ウォレットからElectrumへのインポート機能を利用してP2SHのSegwitウォレットをElectrumで管理しようというわけです。

①BIP39 seedを作成

まずは大元となる12単語or24単語の単語群を作成します。Segwit対応ウォレットがあればそれでもいいんですが、現状では実質的にTrezorかLedgerぐらいしかないので、ツールを利用するのがいいと思います。

最も有名なのが以下のツールです。

GitHub - iancoleman/bip39: A web tool for converting BIP39 mnemonic codes

BIP39 - Mnemonic Code

「bip39-standalone.html」をダウンロードすれば、オフライン状態でも実行できます。そもそも失って困るような大金の保管はハードウェアウォレットやマルチシグネチャウォレット等を利用すべきで、このような方法は止めといたほうがいいと思いますが、セキュリティを気にするならなるべくマルウェア等が介入しにくい状況で行いましょう。

上のツールでは、word数を指定して「Generate」を選択すれば単語群が作成されます。

②Segwitアドレスを確認

意外と忘れがちで重要なのがこのステップ。ElectrumにはBIP39 seedのインポート機能はありますが、チェック機能がありません3.0からチェック機能が追加されたようですが、小さい文字で表示されるだけで見落とす可能性もあるので、②の手順は忘れないことを推奨。つまり、Electrum上にインポートするときに単語の綴りを一文字でもミスしてしまうと、そのミスに気付かず本来とは違うアドレスがそのまま生成されてしまいます。

このミスを防ぐために、①のseedを作成したツール上でSegwitアドレスを確認する必要があります。上のツールの場合は、下の方に「Derivation Path」という欄があり、「BIP49」にタブを切り替えるとSegwitアドレスが生成されます。さらに下の方にアドレスの一覧が表示されるので、先頭の一つ二つをメモしておけば良いです。

③Electrumに①のseedをインポート

いよいよ最後にインポートして終了です。一応インポート方法には二通りあるので簡単に手順だけ。

1.BIP49のDerivation Pathを指定してインポート

Electrum上でウォレットを新規作成

→「Standard Wallet」

→「I already have a seed」

→①のseedを入力、「オプション」の「BIP 39 seed」にチェック

→「m/44'/0'/0'」を「m/49'/0'/0'」に変更

これであとはウォレットの暗号化パスワードを設定すれば完了です。②でチェックしたアドレスと一致することを確かめてから使いましょう。

2.Master Private Keyからインポート

単語フレーズを入力するのではなく、英数字の不規則な文字列から構成されるマスタープライベートキーをインポートする方法です。ElectrumにはPC版だけではなくAndroid版もリリースされていますが、Android版は1の方法が使えないので、2の方法でインポートしなければなりません。

まずは、マスタープライベートキーを確認する必要があります。ウォレットによっては確認できない場合もあるのでご注意ください。先のツールの場合は、「Account Extended Private Key」の欄に表示されている「yprv・・・」がそれです。

手順は、

Electrum上でウォレットを新規作成

→「Standard Wallet」

→「Use public or private keys」

→先ほど確認した「yprv・・・」を入力

これで同様にパスワードを設定、生成されたアドレスに間違いがないことを確認すれば完了です。

 

補足しておくと、Electrumの開発者はBIP39を批判しているということもあり、今後のElectrumのバージョンでもBIP39のサポートを行うことは保証していません。Electrum公式で推奨している方法では全くないので自己責任で行ってください。

まとめ

ということで、Electrum上で3からはじまるSegwitアドレスを使う方法を書いてみました。9月ごろからビットコインネットワークはかなり空いている状態で、昔のような数円の手数料でも普通にすぐ送れる状態が続いていましたが、最近また混雑気味で必要手数料が高騰しはじめているので、まだ使っていない人はこれを機会にSegwitウォレットを利用してみてもいいかもしれませんね。

Bitcoin Goldのようなハードフォークコインを無視すべき理由

明日(今日)にもBitcoin Goldがフォークしそうということで、ハードフォークに関するコラム記事を一つ。タイトルの内容は本質的な議論ではなく割と表面的・現実的な話ですが・・・。

Bitcoin Cashでは何が分裂したか

ハードフォークでは、文字通りブロックチェーンが分岐・分裂しますが、Bitcoin Cashというのは事故的に勝手にチェーンが分岐し始めたわけではなく、当然開発者がいてその開発者が分岐するようなコードを書いてチェーンが分岐したわけです。

その背景には、何年も前から続くビットコインのスケーリングの問題があって、かなり大雑把に分けると、Core派・スモールブロック派・オフチェーンスケーリング派とUnlimited(Classic、XT)派・ビックブロック派・オンチェーンスケーリング派の2つのグループの間でずっと議論が続けられていました。

Bitcoin Cashの開発の方向性はかつてのBitcoin Unlimitedそのままであり、直接のきっかけとなったのはBitmainという大きなシェアを占める中国のマイニングファームが提唱したUAHF、Bitcoin ABCと呼ばれるものでした。BitmainはBitcoin Cashの立ち上げに直接関わっていないとはしていますが、Bitmainとの関係もあって一時はマイニングプールの大多数がBitcoin Cashに移るかもしれないと心配されたこともありました。現在、Bitcoin Cashのコミュニティは過去のUnlimited派などを中心に構成されており、実際Bitcoin Unlimited、Bitcoin Classic、Bitcoin XTなどの過去のビットコインからのフォークプロジェクトのクライアントのすべてがBitcoin Cashのチェーンを参照するようになっています。

つまり、Bitcoin Cashの分裂時には、チェーンだけではなくビットコインコミュニティも、結果としては比較的友好的ではありましたが、分裂したということになります。

ビットコインコミュニティについて

ここで、Bitcoin Cashで分裂した「コミュニティ」について考えてみます。ビットコインの場合、コミュニティは①コードを書いている開発者②ネットワークを支えるマイナー・マイニングプール③ビットコインでビジネスを行う取引所やBTC決済仲介企業④ユーザーの大きく4つに分けられます。

Bitcoin Cashでは、まず②のマイニングのハッシュレートが大きく分裂するのではないかと心配され、結果的には④のユーザーコミュニティの一部が分裂するにとどまるというかたちになりました。

※実際には②一部のマイニングプールもBTCとBTHを並行して採掘している状態です。Bitcoin Cashの開発チームはBitcoin Coreの開発陣というよりは④ユーザーのグループ(もしくは②や③の立場に近い何らかの思惑を持ったグループ?)から出てきたという感じです。

Segwit2Xでは何が分裂しそうなのか

Segwit2Xの発端は5月23日にデジタルカレンシーグループが公開したNew York Agreementと呼ばれる合意文であり、合意に署名した企業には世界中の多くの取引所・決済仲介企業・マイニングプールなどが含まれていました。つまり②のマイニングプールと③の企業が分裂するというプロジェクトなわけです。

最近では署名した企業の一部が支持を辞める旨の声明を発表したり、どういう結果になるかは未だに流動的な状況ですが、いずれにしても分裂の危機は去っていません。

このSegwit2Xには④のユーザーコミュニティが伴っていないという批判や目的・思想がよくわからない・(推測される)分裂の理由が利己的すぎるのでは?などの批判もありますが、③の企業グループや②のマイニングプールも重要なコミュニティの一員であり、それが良いか悪いかは別としてコミュニティの分裂には違いありません。実際に決定的に分裂した際には、Bitcoin Core支持の開発者グループも一般ユーザーも何らかの対策をしないとならなくなる可能性もあり、決して無視できるものではありません。

Bitcoin Goldは分岐ではあるが分裂ではない

本題のBitcoin Goldについて。では、Bitcoin Goldでは何が分裂するかというと、ブロックチェーンだけでありコミュニティが分裂するといえるようなものではありません。

Bitcoin Goldというのはマイニングの集中化を防ぐためにASIC防止対策がなされているものであるため、一部ではCore派が支持しているのではないかという話もみられます。確かにCore派の一部にはSegwit2Xの状況によってはいざとなったらPoWのアルゴリズムを変更してしまおうという人たちもいますが、そもそもBitcoin Goldの開発体制からしてCore派の思想に全く合致するものではなく、①の開発者グループが分裂するものでも全くありませんし、④のユーザーコミュニティがどれだけついているかというとかなり疑問です。

②のマイニングプールについては、香港のマイニング企業LightningASICが立ち上げたものなので、マイニングコミュニティの分裂・・・?と思う方もいるかもしれませんが、そもそもBitmainのような企業と比べるとシェアはかなり小さいところですし、分裂といえるかは非常に微妙なところです。また、そもそもマイニングプールの集中化批判みたいな考えで設計されているところがありますし、PoWのアルゴリズムが変更されるものなので既存のマイニング機器は使えません。つまり、マイニングプールがBTCから離脱してBitcoin Goldに・・・ということは現実的ではありません。

③の企業について、取引所でBitcoin Goldを扱う動きはあるようですが、あくまでもアルトコインの一つという位置づけで、Segwit2Xのように分岐するBitcoin Goldを正規のビットコインチェーンにしてしまおうというものでは全くありません。

コミュニティが分裂しないということは、ビットコイン側としては無視しても構わない程度の存在ということになります。開発リソースも割かれませんし、ハッシュレートが奪われることもありませんし、取引所でBitcoin GoldがBitcoin(BTC)と表記されて混乱することもありません。

Bitcoin Goldは本質的にはアルトコインのAirdropと同じだが・・

Bitcoin GoldがBTC保有者に無料で付与される!?という記事がよく見られるようになりましたが、このような観点で見るとBitcoin Goldは全く珍しいものではなくほかのアルトコインと変わらないと考えることもできます。

BTC保有者に無料で付与する=Airdropを行っているアルトコインとして、有名なものがStellarやByteballです。これらのプロジェクトでは定期的にBTCの保有者(応募者のみ)にそれぞれのコインを配布するというプログラムを行っています。よく探してみるとこのようなAirdropを行っているアルトコインはマイナーなものも含めると意外と多く見つかります。

Bitcoin Goldはハードフォークなので、例外なく全世界の全BTC保有者に同時に付与されるという違いはありますが、BTC保有者にコインを配布するという観点では全く同じです。

ハードフォークによるAirdropは無料で「ノーリスク」でもらえるわけではない

先の段でBitcoin GoldはアルトコインのAirdropと同じと書きましたが、ユーザー側から見ると、ハードフォークによるAirdropはアルトコインのAirdropよりも実は危険と考えることもできます。

ここでBitcoin Cashの時を思い出してもらいたいのですが、特にウォレットに保管していた人は、Bitcoin Cashを取り出すために従来のBTCのアドレスの秘密鍵やウォレットの12単語~24単語の復元フレーズをBCH対応ウォレットに読み込ませるという作業を行ったかと思います。これはハードフォークであるため、フォーク時にBTCを保管しているアドレスにBCHが同時に発生するという性質があるためでした。

Bitcoin Cashの時は非常に大きな話題となったために、ある程度時間はかかったものの多くの既存の信頼性の高いウォレットがBCHに対応するというかたちであまり大きな問題にはならずになりました。しかし、Bitcoin Goldや今後もしかしたら発生するかもしれない特にコミュニティの分裂を伴わないようなささいなフォークなど、すべてにウォレット側が対応するかといえばかなり疑問があります。そうなったときに困るのがユーザーで、ウォレットに保管していたけど自分のウォレットは対応していないから取り出し方がわからない・・・という人が続出すると思います。

そんなときに危険なのが、「ハードフォークコイン取り出しツール」です。なんかよくわからないウェブウォレットがBitcoin Goldに対応しているらしい、復元フレーズを入力すれば取り出せるな・・・と油断して入力・送信してしまうと実はそのウェブウォレットには悪意のあるプログラムが仕込まれており、復元フレーズないし秘密鍵を外部に送信してしまうというリスクがあります。

これを防ぐために最低限事前にBTCを別のウォレットに分離しておくことが重要になりますが、それだけでも確実ではありません。よくわからないウェブウォレットやダウンロード・インストールするウォレットソフトにマルウェアを仕込まれれば、同じPC・スマホ環境にあるウォレットの秘密鍵は全部盗まれてしまうかもしれません。

厳密にいえばアルトコインのAirdrop関連でも秘密鍵の入力を求める悪意に満ちたツールは存在しています。しかし、少し勉強していれば秘密鍵や復元フレーズを入力する必要があるというのはあり得ないわけで、簡単に避けることができます。一方で、ハードフォークでは秘密鍵を入力するのが普通ともいえるので、より引っ掛かりやすいと考えられます。

その他にもBTCのアドレスとハードフォークコインが結び付けられてしまうことで、プライバシーが失われてしまうとかの重要な問題とかもありますが、マルウェアの問題と比べると実際的なリスクはあまり大きくはないと思うのでここでは省略。

一応、ハードフォークコインのプロトコル自体が悪意のあるもので勝手にハードフォークコインが送金されてしまう・・・みたいな重大なリスクもあるといえばありますが、そのようなひどいコインは盗難されたところで大してダメージもなくすぐ消滅すると思うのでこちらも省略。

さいごに

Bitcoin Goldには取引所がどう扱うか問題もありますが、これについては非常に悩ましいと思います。そもそもコミュニティが分裂したものではないアルトコイン的なハードフォークコインをすべて扱うべきかという話があります(取引所が扱うことで必然的にコインに価値が生まれてしまうのがいいのか、さらにプレマインでもしてると開発者が自動的に儲かる、いろいろ問題がある?ハードフォークコインの新規発生を助長してしまう等々)。一方で取引所側とすれば、扱わないと残念ながら「取引所が客の金を盗んだ」と主張するクレーマーも出てくるでしょうし、どこかに扱う取引所が出てくるとそこの取引所に資産を移されてしまうという事情もあるかもしれません。逆に基本的には取引所に預けていれば怪しいツールに秘密鍵を入力したりすることはないはずなので、取引所が付与することでセキュリティの一部分が保証されると考えることもできるかもしれません。

いずれにしても、根本的にはどのハードフォークでもAirdropでも同じではあるのですが、たとえ公式サイトからリンクが張られていても不用意によくわからないソフトをインストールしたり、秘密鍵やフレーズを入力したりするのは止めましょう、ということで。

10月15日のCounterpartyのアップデートの内容は?

10月15日にCounterpartyがアップデートされたようですが、EthereumのMetropolisに隠れてあまり話題になっていないようなので内容をサラッと書いておきます。

トランザクションサイズの削減(CIP11)

Counterpartyのすべてのトランザクションのサイズを3バイト削減するアップデートが行われました。さらに次のCIP9のおかげで実質20バイト程度削減されています。最小でもトランザクションのサイズは250バイト程度なので、ほぼ誤差で必要手数料の差の違いを感じることはないでしょうが、サイズが減るに越したことはありません。

送信時のdust(ゴミ)BTCが不要に(CIP9)

これまでCounterpartyではトークンの送信時などで必ず5430satoshiを同時に送信する必要がありました。それが今回のアップデートで全く必要なくなりました。

昔は5430satoshiというと微々たる額でほとんど気にはならなかったのですが、BTCの価格高騰の影響で5430satoshiも30円程度となり決して無視できない額となっていました。ちなみにCounterpartyのリリース文だと40%から45%の手数料削減とか書かれていますが、おそらくこの5430satoshiを手数料に含めて考えたときに、それが必要なくなるので40%-45%安くなるという意味であって、前述のとおりマイナーに支払う手数料はあまり変わらないと思われます。

もしかしたらトークンが送られてくると5430satoshiもついてくるので、ちょっと嬉しい・・・と思っていた人もいるかもしれませんが、実際には少額のゴミBTC(dust)が集まるとそのdustをまとめて送金するときに莫大な手数料がかかることがあるので、必要手数料が高騰している状況だとdustは文字通り邪魔になることがよくありました。

CIP9は「Enhanced Send」と呼ばれており、アップデート後もこの機能をオフにして従来通りのdustを付加するトランザクションを実行することもできるようです。

なお、dustが不要になったことにより、ビットコインのブロックエクスプローラ上からはトークンの送信先がわからなくなっているのでご注意ください。一見するとただBTCを自分のアドレスに送り返しているだけのように見えるはずです。

メモ添付機能の追加(CIP9&CIP12)

Counterparty以外のトークン発行系のプラットフォームだと当たり前のようにある機能ですが、今回Counterpartyにも追加されました。34バイト(全角17文字)という制限はありますが、送金時にメッセージも送りたい・・・という人は意外と多かったかもしれません。

開発としては取引所のコスト削減をメインターゲットしているようです。取引所が顧客を判別する方法としては、顧客ごとに入金用アドレスを割り当てる方法と、入金用アドレスは統一して顧客ごとに固有の識別子をメモで送ってもらう方法の二種類があるかと思います。

前者だと大量のアドレスに散らばったBTCを集める必要があり、手数料もかかるので、よりコストが大きいと考えられます。今回のアップデートでメモで識別する方法が可能となりました。

ちなみに、入金にメモの添付が必要なアルトコイン系の取引を行う方は経験があるかもしれませんが、万が一メモの添付を忘れてしまうと取引所側がだれの入金なのが判別できず、取引所内の自分の口座に残高が反映されないのでサポートに連絡をとるしかない・・・というトラブルが発生します。これを防ぐために、特定のアドレスについてメモの添付がないと受け取りを拒絶し、ネットワーク上で送金が成功しないような仕組みもCIP12により導入されました。

なお、メモに関してはまだ多くのウォレットが機能を未導入のようなので、ウォレット側のアップデート待ちという状況のようです。先週リリースされたCounterpartyのデスクトップウォレットであるFreewallet.ioには一応メモ送信機能がすでについているようですが、試してみたところ受け取っても(ブロックエクスプローラ上でしか)メモの表示ができないので、まだ使えるものではありませんでした。

今後のアップデートとか

今後(先月のリリースだと11月後半予定)は、一つのトランザクションで複数のトークンやユーザーに同時に送信できる機能追加や、Segwitにも対応する予定のようです。

実はここしばらくは手数料10円以下でもSegwitを使わなくても、BTCないしCPトークンの送信が普通にすぐ承認されるような状況が続いているのですが、いつまた高騰しはじめるかわかりませんし、どちらも手数料の大幅削減につながるので期待したいところです。

オフチェーンが実用化されないと・・・

実際は安い手数料で送れても、ふつうのビットコインウォレットも含めてほとんどのウォレットの手数料の自動調整機能の精度が微妙だったりして、最適な手数料を選ぶにはある程度勉強して自分でどの程度の手数料が最適か考えなければいけません。ビットコイン決済もCPもそうですが、一般層に普及するには一般ユーザーのそもそもの必要手数料を大幅に削減するオフチェーン取引が必須だと感じます。

参考サイトなど

counterparty-lib 9.55.3 released! | Counterparty

Segwitアドレスについて復習

segwit2xやらがそろそろ目前?になってきたようですが、先月先々月あたりからまだ全然情報を追えていないのでとりあえず復習シリーズ。

segwitがアクティベートされたのはずいぶん昔に感じてしまう方もいるかもしれませんが、8月24日、まだ1か月半程度で対応ウォレットもまだ非常に少ない状況です。

現在対応している主要ウォレットは、おそらくハードウェアウォレットのTrezor、Ledgerとウェブウォレット(運営側とのマルチシグ)のGreen Address(Greenbits)のみです。その他一部取引所とかウェブウォレットのBitGoなども対応しているようです。

segwitに対応したElectrumの次バージョンが間もなく出る予定なので、そちらを試してから書いてもよかったのですが、リリースが延期し続けているので、もうgithubから自分でコンパイルして次バージョンのbcからはじまるsegwitウォレットを一応試したので書いてみます。

Segwitアドレスを使うメリット

大前提として、segwitが有効化されても、segwitアドレスにBTCを移動させてそのアドレス上のBTCを使わないと、segwitを利用したことにはならず今までと全く変わりありません。

segwit自体のメリットは過去の記事やほかのサイトを参考にしていただければ良いかと思いますが、エンドユーザーがsegwitアドレスを使うことの最大のメリットは手数料が安いということにつきます。

トランザクションの構成によって変わってくるので、個別の送金に対しては一概には言えませんが、トランザクションの中の署名が占める割合は総平均で大体60%程度で、従来の半分程度の手数料で安く送れることが期待できます。

最近は時々ネットワークが空いている状態になっており、タイミングを見計らって手動で手数料設定すればsegwitでなくてもかなり安く送れることも多いのですが、全般的に安くなるのは大きなメリットでしょう。ちなみに後で説明するbcアドレスから試しにBTCを送金したら1円の手数料でも6ブロック程度ですぐに承認されました。とはいえまあこれもネットワークが空いている影響が大きいので参考程度にお考え下さい。

細かい話をはじめると、セキュリティ的に優れてるとかも一応ありますが、今の1からはじまるアドレスが危険というわけでは全くありませんし、普通のユーザーが気にするレベルの話ではありません。

Segwitアドレスの種類

3からはじまるアドレス(P2SH)

3からはじまるsegwitのアドレス。今まではマルチシグネチャアドレスでもこのアドレス形式が利用されており、一見マルチシグと区別ができません。マルチシグアドレスが自動的にそのままsegwit対応になるわけではないので、マルチシグネチャウォレットを使っている場合でも、新しいsegwitアドレスに送らないとsegwitを利用することはできません。

現在はすべてのウォレットが3からはじまるアドレスへの送金には対応しているので、segwitアドレスの生成に対応しているソフトでウォレットを作れば、すぐにこのsegwitアドレス宛にBTCを移してsegwitを利用することができます。

bcからはじまるアドレス(bech32、BIP173)

f:id:jpbitcoin:20171012183850p:plain

bcからはじまるsegwit専用のアドレス。segwit専用とはされていますが、今までのアドレスと大きく仕様を変えており、見た目としては大文字小文字の区別をなくしてコンパクトにしたり、segwitとは関係なく(base58から)アドレスそのものの改善が図られています。今後シュノア署名などが導入された際にもbech32が利用される可能性は高いと思われます。

アドレスとして優れているので、今後はbech32がメインでP2SHのsegwitアドレスはあくまで移行期間中のものと考えるのが良いと思います。ただbech32を規定するBIP173はまだdraft状態ですし、対応ウォレットはゼロです。

対応ウォレットでなければ送ることができないので、bcアドレスを生成してもそこにBTCは送れないことになります(bech32のアドレス内のBTCを外部を送ることはできるので、BTCが取り出せなくなってしまうことはありません。)。

今の1からはじまるアドレスからbcからはじまるアドレスへ直接BTCを送って移行することは技術的・仕様的には可能ですが、試しにbech32のアドレスへの送金をブロックエクスプローラで見ても、アドレスの詳細が表示できなかったり、アドレスそのものが表示されなかったりとウォレット以外もまだまだ未対応な状況なので、実験目的ではなく普通にsegwitを利用したいならP2SHの3からはじまるアドレスを利用するのが無難でしょう。

f:id:jpbitcoin:20171012184407p:plain

ちなみにElectrumの次バージョンは現時点ではP2SHのウォレット生成には対応しておらず、segwitウォレットを選択すると強制的にbech32のbcからはじまるアドレスになるので、なかなかsegwitウォレットは選択しづらいかもしれません。

3からはじまるアドレス、P2SH形式のアドレスが実装された時も、多くのウォレットが対応し送れるようになったのも2,3年程度かかったようなので、bech32への移行も少なくとも1年、数年程度は見ておく必要があるのかなと思います。

まとめ

今回のsegwit導入により新しいアドレス形式が導入され、必須ではないもののビットコインでは初めてアドレス移行が推奨される状況となりました。今後も新しい署名形式が導入された際などはアドレスを移行する必要がでてくるかもしれません。

segwitに関してはとりあえず3からはじまるP2SHに移行、いずれbcからはじまるbech32へ、という感じでしょう。

参考サイト

bips/bip-0173.mediawiki at master · bitcoin/bips · GitHub

 

技術に興味がある上級者向けの情報収集法~ビットコインはここが面白い

先月から今月にかけてBitcoin Cash誕生、Segwit実装、中国(+韓国)のICO・取引所規制、・・・と様々なニュースがありました。しかし、正直なところニュースの見出しを読むくらいで全然情報は追えておらず、こちらが教えてほしいくらいなので今日は時事とは関係ないちょっとマニアックな話でもしたいと思います。

ビットコインの(技術的な)情報収集のしやすさ

ビットコインが優れているところ、あるいは面白いところは、いろいろあるかと思いますが、個人的にある意味一番重要なのがこの情報収集のしやすさです。

オープンソース+開発者が多い+コミュニティが開放的

その理由は大前提としてオープンソースであること。そして他の暗号通貨との最も大きい違いは、開発者の多さとコミュニティが開放的であるということです。

オープンソースのプロジェクトは暗号通貨の世界では当たり前ですが、極端な話開発者が一人しかいなければ、どのようなコードを実装するかは開発者の脳内でしか議論が行われないわけで、その過程というのは第三者には全く分かりません。

対して開発者が非常に多いビットコインでは、必ずgithub上でpull requestの申請が行われ承認を受けた上で実装されますし、大きな変更を伴うようないわゆるBIPでは必ずメーリングリスト上で提案・議論が行われます。

また、ビットコインの主要開発者による定例のミーティングはすべて公開で行われ、その内容はすべて無料で公開されており、非常に透明性が高いものになっています。

コードを読む必要がない

インターネット上にすべて公開されているこれらの議論を読めばだれでも無料で最先端の技術情報を追えるので、情報収集をする側にとってはビットコインは圧倒的に優れていると感じます。

また、そのおかげもあって最先端で難しい内容以外にも初歩的でかつ詳細な情報もインターネット上で入手できるので、コードを読まないでも手軽にかなり深いところまで理解しやすいのが最もビットコインの面白いところです。

前提知識

前置きはこれぐらいにして、自分が行っている技術的な内容の情報収集法を書いていきたいと思います。

英語

残念ながら、まず英語を読める能力は必須です。情報が日本語よりも英語のほうが多いから・・・というよりも、根本的に議論はどうしても英語で行われるので、英語を使わざるを得ません。いくら今後日本語の情報が増えても、最先端の議論が世界中の人々により日本語で行われるぐらい日本語が世界中に広まらない限り、英語が必要なことは変わらないでしょう。

ビットコインの基礎知識

英語だけ出来ても、専門用語ばかりのビットコインは最初は正直訳が分からないと思います。

書籍

基礎知識を学ぶにはやっぱり本が一番安定でしょう。最近は、日本語でも技術的な内容が書かれた書籍が出ているようですが、全然読めておらずどれがいいか分からないので、今後、いろいろと読んでレビューでも書ければいいと思っています。とりあえず「Mastering Bitcoin」がよくまとまっているのでおすすめです。

ウェブサイト

書籍以外になるとインターネット上から情報を収集するしかありません。入門者向けの記事は日本語でもいくつかあるので、適当に探してもらえばよいかと思いますが、最も広く詳細にまとまっているのがBitcoin wikiです。中にはちょっと怪しかったり古い記事もありますが、wikiとは言ってもビットコインの開発者も編集していますので、誰が書いたか分からないようなそこらへんのサイトの説明記事よりは十分信頼できるかと思います。

個人的にも、ビットコインを調べ始めた当時は書籍が皆無でインターネット上で調べるしかなかったので、このBitcoin wikiを中心に、補完的にbitcointalkやIRCで詳しい人やコア開発者の話を見たり聞いたりして、いろいろ基礎知識を覚えていきました。

情報収集場所

本題の情報収集場所について。最新の議論が行われていますが、毎日のように見ているとキリがないので、気になった話題についてまとまって時間がある時に見るくらいです。誰よりも早く常に最先端の情報を入手したいとかでなければ、普段は適当にニュース記事を見るくらいで気になったら以下のようなソースで深く調べるくらいで十分だと思います。

github

https://github.com/bitcoin/bitcoin

まずは実際にコードが公開・実装されるgithub。issuesやpull requestsを見ると稀によく理解していない人の疑問がかかれいてその回答が非常に参考になる・・・ということもあるのですが、大半は(一見)重要ではないものなので、実際は他のサイトのソース元として引用されているときや、新しいクライアントが出た際の変更履歴に貼られているリンクを見るくらいです。

メーリングリスト

https://lists.linuxfoundation.org/pipermail/bitcoin-dev/

今後のビットコインに関する提案やそれに対する議論が行われている場です。BIPが作成される際は必ずここのメーリングリストに投稿され、議論された後番号が割り当てられます。

すべて読んでいると時間がいくらあっても足りないので、これも実際には時間がある時に面白そうな内容を見たり、他のサイトからのリンクで見るぐらいです。

IRC

https://botbot.me/freenode/bitcoin-core-dev/

毎週IRCで定例のミーティングが行れています。日本時間の深夜なので、アジア圏に住んでいる開発者はどうしても参加しにくく、一部の主要な開発者のみで議論が行われています。生ログを見ると頻繁に略語が使われたりして分かりにくいことが多いので、最近更新されていないようですが、以下のまとめを見るのがお勧めです。

https://bitcoincore.org/en/meetings/

SNSなど

古くはbitcointalk、最近はredditやtwitter、あるいはQ&A形式のstackexchangeなどがあります。これらのサイトでは書き込む敷居が低いせいもあって質の低い不正確な情報もあったりするので、githubとかメーリングリストとか他のところでもそうなんですが特に投稿者を見ることが重要です。個人的にはコア開発者とか一部の人間しかほぼ信用してません。開発者の中でもその論理飛躍しすぎじゃない?とかUnlimited憎し?でちょっと極端だな・・・とかいう投稿もあったりするのでいろんな人の投稿を見て判断するのが良いと思います。

twitterをやっている開発者もいますが、文字数制限があったり、前後の文脈が非常にわかりづらかったりして、議論をしたり技術的な内容を話すのには向いておらず、ほぼ見てません。

まとめ

ということで、普段はニュースサイトの見出しやらで概要を理解して深く知りたい内容だけ、上の4つで調べる・・・という感じになっています。たまにこのブログのように技術的な内容をまとめた記事もあって最初のとっかかりとしては非常に助かるのですが、できれば結局ソース元を見るのが早いし間違えも少ないことが多いです。

アルトコイン

では、アルトコインはどうなの?というと、やっぱり人が少ないという影響が最も大きいせいか、情報量が少なく深く知るのは大変です。アルトコインの記事を書く際にはどうしても公式が発信している内容をそのまままとめて翻訳するみたいな感じになっています。

例えばある程度ちゃんと書かれているホワイトペーパーを読んでいても、細かい部分で疑問が生まれたりして、運よくフォーラムに同じ疑問が書かれているという場合以外、それを解決する手段がコードを読んで理解するかslackで直接開発者に聞く・・・とかしかありません。

一つのコインだけ調べるならそれでもいいのですが、何十となると正直そこまでやってられませんし、アルトコインのうちどれが優れてるの?と聞かれてもすべてのコインについて深いところまで理解できていないので、分かりませんとしか言えません。

ビットコインと違って柔軟に変更がしやすいアルトコインはいろいろ技術的に面白い内容も多く好きなのですが、情報収集のしやすさという点では、やはりビットコインが圧倒的だと感じます。

価格よりも技術が面白い

ということでビットコインを投資・投機で楽しむだけではなく技術面も楽しんでみてはどうでしょうか。

価格を気にし始めると常に最新の情報を追わなければならず、しかもその情報も真偽があやしい・・・。規制問題でいろいろとニュースが今も流れているようですが、中国・韓国当局の動きなんて取材しないとわからないし取材しても正確には全貌は分からないのでは?と思って自分は結果が見えてくるまで噂話はほとんどスルーしています。

対して技術的な内容はほぼすべてが無料でオープンになっていますし、好きな時にマイペースに調べることができます。

皆さんもニュースで消耗せず技術を楽しんでみてはいかがでしょうか。

【独自トークン】Waves上にもトークンを作りました

お知らせなので短めに。

複数のプラットフォームでいただいた寄付の見返りにトークンをお返しする企画を実施中ですが、最近はWavesの開発が活発で伸びてきている感じなので、Waves上にもトークンを作成しました。

同時にWAVESによる寄付も受け付け始めました。トークンはただの記念みたいなものであまり価値のあるものではないですが、寄付をしていただいてトークンを保有している方には気持ち程度で(需要はかなり少なさそうですが・・・)、ウォレット更新のお知らせのメルマガを月1回お送りしています。今月よりWavesウォレットの更新情報も配信しています。

興味のある方は以下のサイト内のページより詳細をどうぞ。

コメントや寄付のお願い(独自トークン企画) | Bitcoin日本語情報サイト

※ビットコイン2.0という言葉が完全に死語になりつつあるので、変えようと思いつつも良い代案が思いつかずにそのままになっています・・・。