読者です 読者をやめる 読者になる 読者になる

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

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

Bitcoin UnlimitedとCoreの対立について

ビットコイン

ビットコインのETFが非承認になって、とりあえずしばらくの間はスケーラビリティ問題に話題が移りそうです。ということで、Bitcoin UnlmitedとCoreの対立についての簡単なまとめと私見を書いておきます。

Bitcoin Unlimited

Bitcoin Unlimitedとは、ビットコインのブロックサイズ上限1MBを撤廃して、ダイナミック(可変的)にブロックサイズを決定しようとするソフトウェアのバージョンです。「公式」のソフトウェアはBitcoin Coreと呼ばれており、その開発チームとは別の人々によって立ち上げられました。

現在のビットコインのブロックは、もうだいぶ前から1MB上限に達しており、最近は特に混雑具合が増して必要手数料が増大する状況になっているので、すぐにでもブロックサイズを上げなければならないという観点等から主にBitcoin Unlimitedの支持者が増えています。

現在はSegwitをソフトフォークによって実装するプロセスが実行中ですが、Bitcoin UnlimitedはSegwitに否定的であるというのが特徴です。その理由は、ソフトフォークはハードフォークよりも複雑だとか、Segwitやその後のLightening Networkによりマイナーの手数料が減るとか、SegwitはBlockstream社(サイドチェーンなどを開発するCore開発者の何人かが所属するブロックチェーンの開発企業)の商品でSegwitが実装されればBitcoinはよりBlockstream Coinになってしまうとか様々なことが言われています。

正直なところ個人的にはSegwitの否定的な意見に納得できるところはほとんどなく、政治的な道具になってしまっているという印象です。

また、Bitcoin Unlimitedは技術的にも以下のような危険性が指摘されています。

Bitcoin Unlimitedの設計哲学「突発的コンセンサス」が危険な理由 | ビットコインの最新情報 BTCN|ビットコインニュース

この件を含め、開発チームの開発力にも疑問があり、公開の定例ミーティングなども一切やっておらず、Coreの開発チームと比べると相当レベルが下がるのではないかという印象です。

そんなわけで、ダイナミックなブロックサイズ変更という根本思想一点には賛同できますし、Coreは現状を見ていますぐブロックサイズを上げるべきと感じます。ただし、Bitcoin Unlimitedにはその他で納得できるところがほとんどないので、Coreのほうが好ましいと思っています(日本には「Unlimited派」の人がほとんどいない気がするので、意見を発信してくれると面白い。)。

Segwitも持ち上げられすぎ?

同時に感じているのがSegwitが持ち上げられすぎではないかということです。「Core派」の中には、Segwitによりブロックサイズ上限が実質的に約2MBまで上昇するので、ハードフォークによってサイズ上限を引き上げるのと同じ効果だから、とりあえず賛成に回れという人もいますが、実質的に約2MBというと(当ブログ記事でも過去に書いてしまいましたが)語弊がある表現になってしまうかもしれません。

というのもSegwitを利用するには新しいアドレス形式(マルチシグネチャと同じ3からはじまるアドレス)を利用しなくてはならないからです。Segwit実装後も、もしすべての取引が現在の1からはじまる普通のアドレスや3からはじまるマルチシグネチャアドレスのみから行われれば、ブロックサイズ上限は1MBのままです。

一般のユーザーがSegwitの新しいアドレス形式を理解して、広く使われるようになるにはかなり長い時間がかかるものと思われます。このため、Segwitが実装されたらすぐに手数料が元に戻って安くなるというのは楽観的すぎる見方かと思います。

また、Segwitはトランザクション展性を根本的に修正するのが主目的ともいえるものですが、同様に新しいSegwitアドレスを利用しなければ全く意味がありません。今までの1からはじまるアドレスには引き続きトランザクション展性が存在し、何回かソフトフォークによって修正対応はされており「Segwit待ち」のソフトフォークによる修正計画(BIP146)も現在あるのですが、今後も新たな脆弱性が見つかった場合には都度修正する必要があります。

UASF

さらに最近もう一つ話題になっている「UASF」というものがあります。これは、User-Activated Soft Forkの略です。そのまま訳すと「ユーザー主導のソフトフォーク」的な意味になり、語感から言うとノードの賛成比率からソフトフォークを実行するの?と勘違いされがちですが、全く違います。

別の言い方として「Flag-day soft fork」と言われることがあり、こちらのほうがより正確です。要するに、特定の日になったらマイナーのハッシュレートにもノードのアップグレード率にも関係なく強制的にソフトフォークをしようとするものです。マイナーのSegwit賛成率がなかなか上がらないので、ユーザーが賛成すればSegwitを実装できるようにしてしまおうという考えが背景にあります。

このUASFは、なぜかCore派の代表的主張として取り上げられることが多いのですが、最初の発端は「shaolinfry」という匿名の人物がビットコイン開発チームのメーリングリスト及びbitcointalkに投稿したことであり、Coreの開発チームから話が出たわけでは全くありません。

実際的にUASFについては、Coreの開発チームはほとんど無反応という感じです。「Core開発者」の範囲をどこまで広げるかにもよるのですが、広い範囲でいうと正直誰がそうなのかほとんど把握していないので、IRCの定例ミーティングに毎回出席しているような「コアな」Core開発者に限って言うと、Luke-jrが低いマイナーのハッシュレート下では実質的にハードフォークとなる危険性を指摘し、75%程度のハッシュレートを必要条件としたほうが良いという提案(=つまり今のBIP9ソフトフォークの閾値を下げるだけ?)をメーリングリストやredditでしています。その他、gmaxwellが「興味深い提案だけど、何か意見を言うのは時期尚早。いろんな意見が出るのはいいこと。」とredditで発言するにとどまっています。

その他、「Core派」の普通のユーザーの中にもUASFによるフォークの危険性を指摘する人が多くいて、本当に本気でUASFを実行したいと考えている人が多いのかは疑問です。

また、実はUASFの考えは新しいものではなく、Nakamoto Satoshiが開発していた時代のソフトフォークは、まさに特定の日が来たら強制ソフトフォークを実行するというUASFとほぼ同じ考え(UASFはBIP9のソフトフォークプロセスを前提としているので厳密に言えば違います)のものでした。

その後、安全性・安定性の観点からBIP16でハッシュレート55%を閾値とし、BIP34でFlag dayを撤廃したうえでハッシュレート75%を閾値とし、さらにBIP65,BIP66では95%を閾値として、現在のBIP9の複数段階のソフトフォークプロセスに移行してきたという経緯があります。正直なところ、過去の仕様に戻すようなUASFがなぜこんなに話題になっているのか謎ですし、Coreの開発者たちの思想からいって実際に行われる可能性は限りなく低いのではないかと思います。

あったとしても、急進的な別グループがUnlimitedと同じような感じでフォーク版を作るということにしかならない気がします。

最も良い今後のシナリオは?

Bitcoin UnlimitedがCore側と和解してSegwitも採用というのが万々歳な未来ですが、今の状況を見ているとなかなか一筋縄ではいかなさそうです。よくCore側とUnlimited側が決裂してハードフォークというのが最悪なシナリオと言われますし最近まで自分もそう思っていましたが、むしろ膠着状態のまま何もできないのが最悪なのでは?という気がしています。

もしUnlimited側がハードフォークすれば、(中立の立場のマイニングプールがいないという条件のもとでは)Core側のチェーンにSegwit反対派がいなくなるため95%を自動的に達成し、CoreチェーンにSegwitが実装されることになります。同じ理屈で、Unlimited側でハードフォークを意図的に行わなくても、低いSegwit賛成率では危険なので難しいですが、もし90%程度まで達するのであれば、Unlimitedブロックを無効なものとCore側のマイナーが判定することで、強制的に95%へもっていくことも可能です。

実際にハードフォークが行われれば、ハッシュレートの低い方のチェーンは消え去るというある意味楽観論もありますが、やはりETHとETCの例を見ていても二つとも少なくとも短期的には生き残るのではないかと思います。ハードフォークにより価格は恐らく大暴落するでしょうし、ETHとBTCはさすがに規模が違うので取引所の対応やユーザーの対応はとんでもなく大変になるでしょうが、このまま何年も膠着状態を続けるくらいなら、いっそ長期的に見れば早く(Unlimited側が)ハードフォークしてくれたほうが良いのでは?というお話しでした。

参考サイト

[bitcoin-dev] Moving towards user activated soft fork activation

Version bits extension with user defined activation · GitHub

Segwitを採用する(予定の)アルトコインを調べてみた

少し前にLitecoinのSegwit採用が話題になり、最近はMonacoinが話題となっているので、他のアルトコインはどうなのか調べてみました。

ACTIVE(採用済)

Groestlcoin

ほとんど話題に上がっていませんが、世界初のSegwit採用コイン。PoW型でGroestlというGPU/CPUマイニングのみのハッシュアルゴリズムとなっています。アルトコイン乱立全盛期の終わり頃?の2014年3月にスタートしており、Groestlという他では採用されていない関数を使ったという一点でそこそこ目立っていたほうではあるので、知っている人は知っているかもしれません。

採用プロセスはビットコインと同じ2016ブロックごと、95%がしきい値の設定ですが、ブロックタイムが1分なので、ビットコインの2週間に対してわずか1日余りが1投票期間になります。

ブロック番号#1435392(1月21日)からシグナル(投票)が開始され#1437408(1月23日)には95%を超え採用が決定されました。最初の期間で95%を超えたことになります。単一のマイニングプールが支配しているとかではないようですが、現在は時価総額180位の超マイナーコインなので、小規模だからこそ迅速にできたと言えるのかもしれません。

STARTED(投票期間中)

厳密に言うと「投票」は語弊があり怒られそうな気がしますが、他にわかりやすい言葉が無いのでそのままに。

Litecoin

ご存知ライトコイン。1期間は8046ブロック(2週間)と設定しており、時間的にはビットコインと同じですが、採用のための最低のSegwitブロックの採掘率は75%まで下げています。

#1145088(2月3日)からスタートして現在は3期間目です。当初は簡単にすぐ75%を超えるんじゃないかと言われていましたが、予想に反して現在は20%前後とビットコインよりも低い割合となってしまっています。

なかなか採用率が増えない一番の理由は、ハッシュレート占有率が40%を超えるライトコイン最大のマイニングプールのF2Poolの準備ができていないためだと思われます。ビットコインでも2番目のハッシュレートを占めているF2Poolは、ニュースサイトのインタビューなどでSegwitには前向きな姿勢だと度々答えていますが、技術的な理由で今年の春ごろまで出来ないというようなことも同時に回答しているので、時間の問題で数か月以内には75%を超えるかもしれません。

現在の状況は以下のようなサイトで確認できます。

Litecoin Segregated Witness Adoption Tracker

LiteCoin SegWit Adoption Stats

Vertcoin

ASIC対策特化のPoW型コイン。Lyra2REv2というMonacoinのハッシュアルゴリズムの借用元でもあるので、そこそこ有名なコインではないかと思います。実は2月8日にSegwit準備済みの新バージョンがリリースされ、Litecoinに引き続き投票期間が開始されるところだったのですが、新バージョンのクライアントのバグ(Segwitとは無関係)により事故的にハードフォークが発生し中止・ダウングレードを余儀なくされました。

その後再びバグ修正がなされ、3月1日にSegwit対応の新バージョンが出ています。1期間は2016ブロック(約3.5日)でしきい値は75%。投票はリリース同日(#675360)から早々にはじまり、現在は最初の投票期間中となっています。

投票状況を確認できるところが見つからなかったのでなんともいえませんが、ブロック情報を軽く見る限りでは最初の投票期間ですぐに有効化されるということはなさそうです。

追記:以下のサイトで見れるようになりました。

Vertcoin SegWit Activation

DEFINED(投票期間前)

Monacoin

近々投票期間が開始される日本発のMonacoin。同じく1期間は10080ブロック(約2週間)でライトコインと同じくしきい値は75%になっています。

投票は3月8日開始予定ですが、現在は海外のマイニングプールが主体となっており、アップデート情報が行きわたっていないのか、投票前では20%程度の投票率となっています。

Monacoinが早くSegwitを採用することになればなかなか面白いですが、悲しいことに海外の掲示板などでは全く話題にされていないので、静かに粛々と採用される感じになるかもしれません。

現在の状況は以下のようなサイトで確認できます。

Monacoin Segwit Status

Monacoin 新旧勢力割合図

 

ということで、実際にSegwit対応のバージョンがリリースされているのは4コインということになりました。アルトコインの数はあまりにも多いので調べ切れていないものもあるかもしれません。また、ここに書いていないものの中にもViacoinなど今後Segwit採用を明言しているようなところもいくつかあります。

ビットコインのSegwit投票状況が停滞している(+ネットワーク大混雑状態の)今、他のコインに目を向けてみるのも面白いかもしれません。

NEMのNamespaceのレンタル期間を更新してみた

体験談

約1年前に作ったNEMのNamespaceのレンタル期間がそろそろ期限に近づいてきたので、更新してみました。Nano Walletに最近更新機能が実装されたので、記事にするまでもなく簡単なのですが、恐らくまだほとんどの人がやったことがないはずなので書いておきます。(ほとんどの人は手数料が下がった昨年の12月以降に借りているはずなので、更新する必要が出てくる時期には仕様とかUIは変わってるかもしれません・・・。)
f:id:jpbitcoin:20170303164703p:plain
1.画像の赤枠のところ、「Renew namespaces」を選択します。

f:id:jpbitcoin:20170303165022p:plain
2.ウォレットのパスワードを入力
3.「Renew」ボタンをクリック

f:id:jpbitcoin:20170303165141p:plain
4.完了!

これだけで終了です。ちなみにNamespaceの更新トランザクションはProvisionNamespaceTransactionという作成(借用)時のトランザクションと全く同じ型のようで、履歴にも作成時と同様の表示がされます。
現在の更新料は作成費用と同じ5000XEMですが、大本のネームスペースを更新すればサブネームスペースやモザイクも自動的に同時に更新され追加の費用を支払う必要はないようです。なお、寄付をいただいていたXEMが5000XEMを超えていたので、すべて寄付から更新料を出すことができました。ありがとうございました。

更新後はNamespaceの情報も更新されています。
更新前:

{"owner":"NBLK2AI3JONRZWVA57TC63W5UQ3JUD77MBXQWQES","fqn":"jpbit","height":511255}

更新後:

{"owner":"NBLK2AI3JONRZWVA57TC63W5UQ3JUD77MBXQWQES","fqn":"jpbit","height":1006151}

期限切れ一月前にならないと以下のように更新はできません。
f:id:jpbitcoin:20170303165924p:plain

Nano WalletのおかげでNamespaceの更新も非常に簡単にできたという話でした。

トランザクションがなかなか確認されないときの4つの解決策

ビットコイン

ここ数日メモリプール(未確認トランザクション)の総サイズが60MB(blockchain.infoより)を超え過去最高レベルの混雑度になっています。ということで、手数料不足でトランザクションがなかなか確認されないときの解決法が、日本語サイト・ブログで意外と見つからなかったのでまとめておきます。

f:id:jpbitcoin:20170223141723p:plain

 1.待つ

ひたすら待てばいつか確認されるか、トランザクションがなかったことになりウォレットに残高が戻るかどちらかになります。一番単純な解決策で、初心者からどうしたらよいか聞かれたらとりあえず「待て」と言っておきましょう。

次からは事前に手数料を高めの設定にしてから送ってください。

2.RBF(後から手数料を変更できる設定にしてから送金)

詳細は過去のRBFの記事参照。Replace-by-Feeの略です。

事前にトランザクションに「このトランザクションは後から手数料が変更される可能性があるよ」とラベルを付けて送信することによって、送信後であってもあとから手数料を変更できます。

対応しているウォレットが非常に少ないのが難点で、主要ウォレットのなかで現在実装しているのはGreenAddress(GreenBits)とElectrumしかありません。公式クライアントBitcoin Coreも次バージョンの0.14からウォレットの機能としてようやく実装するようです。

3.CPFP(未確認トランザクションの確認を待たずに次の送金を実行)

Child Pays For Parentの略です。直訳すれば「親のために子供が(手数料を)支払う」といったところでしょうか。

ちょっとわかりにくいので例を出してみましょう。

A→B

アドレスAからアドレスBにBTCを送信するとします。このときの取引手数料の設定が低すぎたためになかなかトランザクションが確認されません。そんなときにトランザクションの確認をまたずにさらにBからCに送金を実行します。

A→B→C

このとき、B→Cの手数料を十分多くすれば、マイナーは「A→B→C」を一連の取引と考え、A→Bの取引手数料とB→Cの取引手数料の合計を「A→B→C」全体の取引手数料と見なし、A→Bの取引手数料が低かったとしても早めに確認してくれます。

 ただしこの方法には、わざわざ2取引分以上の取引手数料を余分に支払わなければならない点、自分が管理するアドレスへの入金トランザクションでないと実行できない点(ただし大抵の場合、「おつり」を自分のアドレスに送り返してるはずなので、意外と使える場面は多くあります。)などの欠点があります。どこか他人のアドレスに送ったトランザクションがなかなか確認されないというときには使えません。

また、一見「代わりにこっちで手数料支払ってあげるから手数料無料で送っていいよ」というような応用が効きそうな気がしますが、最初のA→Bの取引手数料があまりにも少なすぎると、そもそもノードからトランザクションが拒否されビットコインネットワークから直ちに除外されてしまうため、そのような応用はできません。

実際に行う時には以下の方法があります。

①未確認トランザクションを送金できるウォレット

そもそもそのウォレットが、未確認トランザクションによって送られてきたコインを確認を待たずにさらに送金できる必要があります。多くのウォレットでは対応していると思いますが、未確認トランザクションは結果的に確認されないリスクがありトラブルのもととなるため、デフォルトの設定では無効になっていたり、そもそもできないウォレットもあるかもしれません。

対応しているウォレットの場合、未確認トランザクションを含めた全残高をまとめてすべて自分のウォレット内のアドレスに送りかえすことでCPFPを利用することが可能です。要するに、全残高を使用すれば、必然的になかなか確認されない未確認トランザクションも含まれてCPFPになるということです。

お分かりのように、この方法はトランザクションサイズが大きくなり、それに伴い必要手数料が2取引分だけにとどまらずかなり大きくなってしまう可能性があります。入出金がかなり少ないウォレットでは使えるかもしれません。

②コインコントロール機能が使えるウォレット

コインコントロールというのは、どのUTXOを使うか、どのアドレスから送るかを選べる機能のことです。この機能も対応しているウォレットが非常に少なく、現在のところBitcoin CoreやElectrum、Armory等しかありません。

該当の未確認トランザクションのUTXOを使う取引を作成すれば、CPFPが適用できます。この場合は、2取引分だけの手数料で済みますし、自分のウォレットに送り返すことも、他の外部のウォレットに送って無駄な手数料を支払うことなく一度に済ませてしまうこともできます。

4.二重支払い

2のRBFのところで事前にRBFのマークを付けて送信しないと、後から手数料を変えられない・・・、と書きましたが、他の記事でも何回か書いているようにRBFもCPFPもマイナーやノードのローカルルールでしかありません。普通の取引であっても後から手数料だけを上げた二重支払い的な取引を作成・送信することで、後に送信された取引を確認させることが可能です。

当然と言えば当然のことながら機能として二重支払いが可能なウォレットはありませんが、自力で生のトランザクションデータを作成できる知識があればだれでも簡単にできますし、知識がない人でも英語で検索すれば腐るほど情報がでてきます。

RBFの記事では、サポートしているマイナーが少ないので成功する確率は低いと書きましたが、ハッシュレートの1%を占めているマイニングプールだけがサポートしていたとしても100ブロックに1回、つまり1日に1回を超える期待値で確認されることになります。

前の取引から間髪入れずに次の取引を送信しても、ノードから拒否されてマイナーまで伝わる可能性は高くないかもしれませんが、現状は経験的に1日程経過すればほぼ確実に二重支払いが成功するようです(時間が立つと一部のノードの再起動などによりメモリプールがリセットされたり、一部のメモリプール内の最低必要手数料が上がること等によりトランザクションが除外され、二重支払いの取引とは認識しないノードが増えます。)。

もちろん悪用すると犯罪行為になる恐れもあるので、自己責任で十分理解している人が必要な範囲で行ってください。

まとめ

ということで、ビットコインに慣れてきた人はただ待つだけではなく2や3(や4)の方法を試してみてはいかがでしょうか。

おまけ

2も3も4も面倒だから知り合いのマイニングプールに優先して確認してもらいたいよ、という人にはBitcoin Unlimitedを支持していることで有名になった?ViaBTCというマイニングプールが提供しているTransaction Acceleratorというツールもあります。このツールにトランザクションIDを入力すると優先度を高くしてViaBTCが確認してくれます。ViaBTCのハッシュレートの占有率は現在5%弱なので、20ブロックに1回、つまり3~4時間に1回程度の期待値で採掘されることになります。

なんでこんなことを無償でしているかというと、リンク先のツールを見れば分かるようにBitcoin Coreの開発チームがいかに悪くビットコインを駄目にしているかということを長々と説明しています。つまり政治的な主張の一環として無償でツールを提供しているわけです。

スパム対策のために0.0001BTC/kb以上、1時間に最大100トランザクションという制限があるため、人気が出てきたときは使えなくなりますし、Bitcoin CoreとBitcoin Unlimitedのコミュニティの分裂問題が何らかの形で決着するまでの期間限定だとは思いますが、特に抵抗がなければ利用してみるのもいいかもしれません。

シングルボードコンピュータでビットコインのフルノードを構築してみた

ビットコイン 体験談

一つ前の記事でも少し触れましたが、ビットコインのフルノードをシングルボードコンピュータで構築してみたので、その手順を書きたいと思います。シングルボードコンピュータとはRaspberry Piに代表される超小型コンピュータのことです。

なお、今回のノード構築には今までにいただいた寄付を利用させていただきました。いつもありがとうございます。

0.機種選び

最低2,3年程度の常時安定稼働を目指しノードを構築することにしました。

本体

まずは本体のコンピュータ選びから。Raspberry Piが超有名ですが、メモリ1GBというのが不安でした。bitcoin.orgにもフルノードの最低動作環境は2GBとありますし、その他いろいろ調べてみると、ノード接続数を絞ったりして工夫すれば動くことは動くらしいのですが、長期安定稼働という点やネットワークへの貢献を考えれば貧弱スペックで無理やり動かすのはためらわれたので別の選択肢を探しました。

結果見つけたのが韓国のHardkernelという企業が作っているOdroid XU-4というコンピュータ。詳細スペックはリンク先を参照してもらえればいいと思いますが、最新機種のRaspberry Piと比較すると、CPUは8コア2GHz、メモリ2GB、eMMC対応、USB3.0対応、1Gbpsとかなり高性能です。ちなみにRaspberry Pi 3は4コア1.2GHz、メモリ1GB、USB2.0、100Mbpsという内容。

肝心の価格はOdroid XU-4が74ドル+22ドル(配送料+Paypal為替手数料)、Raspberry Piは35ドルなので、価格差はあるものの性能を考えれば妥当な感じ。

ちなみにOdroidは公式代理店のリストの中に日本の店が無いようなので、配送料が余分にかかりますが公式から直接買うのが良いようです。

Odroidの日本語記事はほぼ皆無で英語情報に関してもかなり少なかったので、実はRaspberry Piすら触ったことがない身としてはやや不安でしたが、結果からいうとインターネット上に転がっているRasperry Piの情報を頼りにほぼ同様にセットアップできましたし特に大きなトラブルもなかったので良かったです。

ただ、やはり情報も使用ユーザーも少ないですし、トラブルがあったときは英語で問い合わせなければならず公式サポートの評判も怪しいので、慣れていない人にはあまりお薦めできません。

ストレージ

普通はマイクロSDカードを使用しますが、フルノードは容量も要求されますし、かなり頻繁にディスク書き込みがあることを考慮して、HDDを利用することにしました。今後ブロックサイズが上がることも考慮して1TBのものを購入。剪定モード(Pruning mode)で運用する人は容量的にはほとんど必要ありませんが、SDカードだとやはり寿命が心配な気がします。

ディスプレイ

ただビットコインノードを運用するだけでもいいのですが、正直それだけだと面白くないのでコンピュータの情報を表示するLCDディスプレイを取り付けることにしました。OdroidにはCloudshellという、2.5インチHDDの取り付けが可能なNAS用のちょうどいいディスプレイ付きケースが販売されているので購入。Odroidを選んだのも実はこのCloudshellに惹かれてと言うのが大きいです。

まとめ

思ったより高くついてしまいました。合計約24,000円です。一部ビットコインデビットカード(プリペイドカード)を使用したので、手数料等で実質にかかったコストは計25,000円程度。

本体部分
  • Odroid XU-4:96ドル(本体+配送料等)
  • 2.5インチHDD 1TB:5570円
  • マイクロSDカード 8GB:518円
  • LANケーブル(CAT6):326円
  • 計:約17200円

基本HDDを使用しますが、ブートローダー(起動用プログラム)にはSDカードを使用しなければいけないようのでマイクロSDも購入。容量は必要ないものの、最低クラスでも値段はほとんど変わらないので8GBのものにしました。いらないSDカードが家に転がっている人はそれでもいいと思います。

ちなみに今回は使用しませんでしたが、CPU8コアをフル運用するとかなりCPU温度が熱くなるので、特に夏場は使用コア数を制限するか追加でファンを取り付けることが必要になるかもしれません。CloudShellにはサイドに40mmのファンを取り付けられるようになっています。

ディスプレイ部分
  • CloudShell for XU4:39ドル
  • 電源アダプタ(5V/6A):2230円
  • 計:約6600円

Odroid-XU4にも標準で5V/4AのACアダプタがついてきますが、CloudShellを使用する場合、それだと足りないらしいので、いろいろと探してAmazonで5V/6Aのものを購入。Odroid公式でも売っていますが、PSEマークがついてないらしいので、値段はあまり変わりませんし日本で購入したほうがいいかもしれません。

1.OSイメージをダウンロード

適当なPCからOSイメージをダウンロード。Odroidの公式wikiにXU4用のUbuntuが置いてあるので、最新のUbuntu16.04をダウンロードしました。

2.OSイメージをSDカードに書き込み

ダウンロードしたOSをSDカードに書き込み。方法は検索すればいくらでもでてくるので省略。

 3.CloudShell(ケース)の組み立て、起動

公式ページを参考にケースを組み立てます。組み立てが終わったら、SDカードやLANケーブルを接続して起動します。今回は使用しませんでしたが、HDMI端子もついているので必要な人はディスプレイにつないでも良いです。

4.SSH接続

ディスプレイ無しでセットアップしたので、ローカルIPを適当に探して他のPCからSSHで接続。同じく方法は省略。

5.HDDで起動するように設定

セキュリティ設定する前にHDDのみを使用するように設定。方法は省略。

6.セキュリティ設定

24時間自宅サーバーを公開するのはいろいろと危険なので、セキュリティ設定にも気を遣う必要があります。SSHのポート変更、rootログイン禁止、パスワードでのログイン禁止、公開鍵認証の設定などが最低限。その他必要に応じて設定してください。方法は省略。

7.LCDディスプレイの設定・表示

公式wikiに設定方法が書いてあります。CPU使用率やメモリ使用率を表示できるサンプルスクリプトも用意されているので、フルノードの起動前に設定・表示しておくと便利かも。

ちなみに初期状態だとスクリーンセーバーのような感じで起動後しばらくして画面が真っ黒になるのでさらに設定を変更する必要がありました。ここが一連のセットアップの中で一番悩みましたが、/media/boot/boot.ini内の、setenv bootrootfs "console...と続く行に「consoleblank=0」を追加したら常時ディスプレイが表示状態になりました。

8.Bitcoin Coreのインストール

いよいよBitcoin Coreのインストール。普通にソースコードからビルドする方法と、PPA(非公式レポジトリ)からインストールする方法の2種類があります。PPAはインストールやバージョンアップが非常に簡単というメリットがあります。ただし、デメリットとしてUbuntu以外のOSは使えない、バージョンアップの際に更新が遅くなる可能性がある、その他やや信頼性に欠けるという点もありますが、幸いなことにUbuntuを使用していたのと、Bitcoin CoreのPPAの管理者はBluemattというコア開発者の一人ですしかなり利用者も多く信頼性はまあ十分と考えて、今回はPPAを利用しました。

sudo apt-add-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install bitcoind

 この三行でインストール終了。GUIウォレットの画面を利用したい方は「bitcoind」だけではなく「bitcoin-qt」もインストールしてください。

9.OSやBitcoin Core等のチューニング

フルノードのためのチューニング。まずはメモリのスワップ領域が全く設定されていなかったので、4GBほど設定(たぶんそんなにいらないです)。最初は何もやらずにノードを起動したんですが、起動後メモリ使用量が95%を超えていたために今回は後から設定しました。ちなみに同期中のスワップ領域の使用容量は200MB程度でした。その他にもいろいろあるかもしれませんが、ここらへんは全く詳しくないので何もいじってません。

それからBitcoin Coreの設定ファイル(bitcoin.conf)を設定します。なにも設定しなくても動くので、必要に応じて設定してください。Raspberry Pi等の場合、メモリがかなり厳しくbitcoindが落ちる可能性があるので、いろいろと絞ったほうが良い場合があります。以下のページが参考になります。

Reducing bitcoind memory usage · GitHub

ちなみにOdroid XU-4もCPUがかなりオーバーヒート気味になるので、par=1などで使用コア数を制限したりする必要があるかもしれません。今回は何も設定しませんでしたが、同期中に一回だけbitcoindが落ちました。CPUが原因かメモリ不足が原因かは不明ですが、メモリのスワップ領域を設定後は落ちなかったです。

10.Bitcoin Coreを起動、同期を待つ

bitcoind -daemon

で起動し、同期するのをひたすら待ちます。Odroid XU-4では2017年2月時点(約120GB)で同期完了まで丸8日かかりました。今回はテストの目的がありましたが、現在は最新のPCなどスペックによっては1日もかからず同期が終わるらしいので、別のPCで同期させてからノード本体機に移動させたほうが良いかもしれません。

ちなみに昔はbootstrap.datなどをtorrentなどでダウンロードする方法もありましたが、現在ではダウンロード速度というよりもブロック、トランザクションの検証速度がボトルネックらしいので普通にBitcoin Coreから起動するのが一番いいらしいです。

 ビットコインノード用にディスプレイ表示をカスタマイズ

サンプルの表示プログラムもCPU使用率等が表示され便利ですが、やはりビットコイン用にノード接続数とかメモリプール、未確認トランザクションのデータなどを表示したいのでプログラムを改変。プログラムはシェルスクリプトになっています。

以下に置いておきますが、スクリプトとしてコマンドを書いたことはほとんどなかったので微妙なコードになってるかもしれません。必要に応じてコードをいじってパラメータを変更しなければならない場合もあるので、少なくともコードを読める人向けです。

GitHub - bitkatana/cloudshell_lcd_bitcoin: ODROID-XU4 Cloudshell LCD Informations for Bitcoin Node

同期中の表示はこちら。

f:id:jpbitcoin:20170218195316j:plain

 

詳細はGithubのページに書きましたが、ビットコイン関連のデータだけ軽く解説。実はブロックの検証中はbitcoin-cliコマンドにほとんど反応せず数十分かかるとかタイムアウトするとか問題があるので、ブロックチェーンの同期中は停止しておいたほうがいいかもしれません。

 ノード接続数

ノード接続数をBitcoin Connectionとして表示しています。「bitcoin-cli getconnectioncount」で普通に取得できます。画面だと61とかなり多めになっていますが、Torで接続するとこんなに行かないと思います(画面はTorのIPになっていますが、同期中は普通に接続していました)。接続数が増えるほど負荷が高くなるので、bitcoindやコンピュータが落ちる場合はmaxconnectionをbitcoin.confで制限するのを推奨。

最新のブロック

「getblockcount」で最新のブロック番号を表示。それから「getblockhash ブロック番号」でブロックのハッシュ値を取得し、さらに「getblock ハッシュ値」でブロックの生成時刻を取得します。現在時刻も取得し、「現在時刻-ブロックの生成時刻」でどれぐらい前のブロックか表示しています。

ちなみにブロックチェーンが同期状態にあるかは、blockchain.info等のブロックエクスプローラー(つまり他のノード)のブロック番号と比較する方法もありますが、Bitcoin Coreでは単純に最後のブロックが90分以内だと同期状態と判断するようにGUIウォレット上では表示しているようです。

メモリプール情報

「getmempoolinfo」でメモリプール(未確認トランザクションの保存領域)に関する情報が取得できます。上の方に表示しているmempool usageが実際のメモリの占有領域、下のほうが未確認トランザクションの数とサイズです。写真上では同期中なので、メモリプールには何にも入っておらずゼロ表示です。

手数料予測

「estimatefee 6」で手数料の予測値を表示しています。estimatefeeの後ろはブロック数を表し、この場合は6ブロック(約1時間)以内に確認されるのに最適な手数料を表示するような設定です。

メモリプールから計算するので同期中では計算ができず-1が返されます。ちなみに、Bitcoin Core 0.14からはデフォルトの値が6になるらしいので、ここでも6にしています。最低値は2で、1にすると計算できないので必ず-1が返されます。

価格情報

取引所のAPIにアクセスして最新価格を取得しています。どこでもいいですが、とりあえずbitflyerとbitfinexのAPIを利用させていただきました。

 11.同期完了

f:id:jpbitcoin:20170218200742j:plain

ということで同期が完了しました。同期中の写真からちょっとスクリプトをいじって表示を変えました。同期後はメモリプールや手数料予測の情報も表示されます。

単なるフルノードだと面白くないし実用性に困りますが、メモリプールや手数料情報、価格情報も表示するとなかなか使えるのではないでしょうか。

 

 12.(オプション)Torとしてノード運用する

IPを隠したい場合や不足気味なTorノードとして運用したい場合はまずTorをインストールします。Torの公式ページにインストール方法があるのでそちらを参照すると良いでしょう。Option1は最新バージョンが入らないらしいのでOption2でインストールするのがおすすめです。

インストールしたら設定ファイルの/etc/tor/torrcを開き以下の行を追加します。

HiddenServiceDir /var/lib/tor/bitcoin-service/
HiddenServicePort 8333 127.0.0.1:8333

 再起動後、

cat /var/lib/tor/bitcoin-service/hostname

 でビットコインノード用のIPを確認します。

さらにbitcoin.confに以下の行を追加します。

onlynet=onion
onion=127.0.0.1:9050
listen=1
bind=127.0.0.1:8333
externalip=yourip.onion

 externalipのところはcat~で確認した自分のIPを入力してください。

ちなみにこの設定だとIPが固定になり、Torネットワーク以外の普通のノードには接続しないようになっています。

動的IPや匿名性ではなくネットワークの貢献のための運用で一般ノードにも接続したい場合は以下のページが参考になります。

bitcoin/tor.md at master · bitcoin/bitcoin · GitHub

Setting up a Tor hidden service - Bitcoin Wiki

13.(オプション)どこからでも自分のフルノードに接続してウォレットを使う

前回の記事で書いた通り、フルノードにはセキュリティ(は現実的にSPVとほとんど変わりませんが)、プライバシーが優れているというメリットがあります。今後SPVウォレットのプライバシーも改善される可能性はありますが、現状だといろいろと問題があるらしいので信用できる自分のフルノード以外と通信しないようにすれば大きなメリットとなるでしょう。

残念ながら現状はAndroid用のBitcoin Walletにしか対応していません。同ウォレットの設定メニューからIPアドレスを設定すれば完了です。

ただし、ビットコインの通信というのは実は全く暗号化されていないので、Torを使わないと通信を傍受されて簡単に内容を読み取られる恐れがありあまり意味がありません。プライバシーが気になる方は通信内容を暗号化できるTorを使いましょう。AndroidにOrbotというTorアプリをインストールすると通信できるようになります。

ただし、TorはTorでいろいろと問題があるらしいですし、第三者のソフトに頼るのはあまり良くないので、SSL通信ぐらい実装してくれと思います。ここらへんはBIP150/BIP151で信頼できるノードの認証方法や暗号化通信が提案されており、前向きに検討されているようなので時期は不明ですが今後の実装に期待というところです。

最後に

ということでビットコインのフルノードを構築してみました。ビットコインのプライバシーというとビットコインアドレスの非匿名性が話題に上がるのが普通ですが、軽量型ウォレットの通信のプライバシーも大きな課題の一つであり、フルノードをたてれば軽量型ウォレットから信頼できる自分のフルノードに接続することでその課題がある程度解消されます。

同期中はかなり負荷が高くなりますが、同期後は安定しており負荷も低いようなので、今後はスペック的にできるかどうかわかりませんがElectrumのサーバーでもたててみようかと思います。

Bitcoreという、ブロックエクスプローラーやCopayで利用できるウォレットAPIが使える(つまりCopayから自分専用のフルノードだけに接続できる)便利なライブラリもあるのですが、やる気がないのかもともとこんなものなのか、いまだに最新のBitcoin Core 0.13系には対応していないようなのでとりあえずは見送ります。Bitcoreに関しては、日本語でもかなり情報が多い印象なので気になる人は検索すると良いでしょう。

どちらにしてもBitcoin Core上でBitcoreとかElectrumサーバーとかCounterpartyとかさらにいろいろとやりたい人は、txindex=1オプション等をbitcoin.confとかに書いてトランザクションにインデックスを付けなければならないので、最初に忘れずに設定ファイルに書いておきましょう(今回忘れたので、再度長い日数をかけてreindexしなければいけなくなりそうです・・・。)。

※BitcoreやCounterpartyはトランザクションだけではなくアドレスなどにもインデックスを付けなければならず、そのために別にBitcoin Coreへパッチをあてる必要があります。

ビットコインのフルノードとは?定義と役割・メリット

ビットコイン

今更と言えば今更な内容ですが、最近シングルボードコンピュータを使ってビットコインのフルノードを立ち上げ始めたので、そのレポート記事を書く前に一本解説記事を書いておきます。

定義と役割

定義というのは変わるもので、「フルノード」の定義についてもあれこれ追加の条件を付けくわえる人はいますが、最も一般的には「すべてのブロックとトランザクションをダウンロードし検証するノード」と言えると思います。ちなみにビットコインネットワークに接続しているコンピュータのことは総称して「ノード」と呼ばれます。

普段ウォレットで使うような、いわゆる軽量型クライアントはSPVクライアント(正確には軽量型の中にはサーバー・クライアント型と呼ばれるものもあり、さらにサーバー・クライアント型のものでもSPV型の検証を行っているソフトもあるので、細かく説明するとややこしくなります)とも呼ばれフルノードとは区別されます。こちらは、過去のすべてのブロック・トランザクションをダウンロード・検証するわけではなく、起動後すぐにウォレットとして使用できるため、ほとんどの人はフルノードのウォレットを利用することはありません。

フルノードとマイナー

よく混同されるのがフルノードとマイナーです。マイナーはブロックやトランザクションの検証も行いますが、主目的はブロックを生成して(nonceを探索)採掘報酬を得ることです。一方フルノードの役割は、ブロックやトランザクションを検証し、各ブロック・トランザクションがビットコインの基本ルールを守っていることを確認し、有効なもののみを他のノードやマイナーに伝達する役割があります。

マイナーも無効なトランザクションなどをブロックに含めてしまったり、無効なブロックを生成してしまってはせっかく採掘に成功しても報酬が無駄になってしまうので、フルノードと同じくすべてのブロックとトランザクションの検証を行うのが基本となりますが、ソフトフォークの記事で少し書いたように、SPVマイニングと呼ばれるようなすべて検証せずに採掘を行うような方法もあるので、「フルノードの一部をマイナーと呼ぶ」と単純に言うとやや語弊がある気がします。

悪意のあるマイナーによるビットコインへの攻撃はしばしば話題にあがりますが、その時に重要な防御策となるのがフルノードの存在です。単一のマイナー・マイニングプールが多くのハッシュレートを確保することによる51%攻撃では、何もないところからお金を生成したり採掘報酬を勝手に増やしたりして、ビットコインネットワークのルールを破るようなことは通常できず、攻撃の範囲が限られますが、それは善良なフルノードが存在するという前提での話です。

軽量型のウォレットノードはいちいちブロックの正当性を検証しないので、悪意のあるマイナーが生成したトランザクションを有効なものとしてほとんど無条件に受け入れてしまうことがあります。実際は多くの善意のフルノードの存在により、不正なトランザクション・ブロックはフルノードから弾かれ、軽量型のウォレットはフルノードから情報を受け取るので、悪意のあるマイナーからのトランザクションを直接受け取るようなことはなく攻撃が防がれることになります。

アーカイブノード(Archival Node)と剪定ノード(Pruning Node)

かつては、フルノードの説明として「すべてのブロックチェーン、取引履歴を保存するノード」という表現が使われることがしばしばあり、当時は間違いではなかったのですが、現在ではやや不十分な説明になってしまっています。

それは、Bitcoin Core 0.11.0へのバージョンアップにより、剪定モード(Pruning Mode)というものが実装されたためです。ブロックチェーンのサイズは現在では100GBを超えるため、フルノードの運用は大きな負担となっています。その負担を少しでも減らすため、過去の不要なトランザクション・ブロックを削除して保存しないようにしようという試みが剪定モードです。剪定モードでは、最初は全てのブロック・トランザクションをダウンロード・検証しますが、不要になったものは削除し、最終的にはすべてのUTXOと直近のブロックのみを残します。二重支払いがない有効な取引かどうかは、ブロックチェーン全てを検証するまでもなくUTXOだけを検証すればよい話なので、いらないデータは削除してしまおうというわけです。

この剪定モードを採用しているノードは剪定ノード(Pruning Node)と呼ばれますが、一度は全てのブロック・トランザクションのダウンロード・検証を行うので、一般的には「フルノード」に含められます。

対して、従来のように過去のデータを削除せずすべてのブロックチェーンを保存するノードは、アーカイブノード(Archival Node)と呼ばれます。最新の取引の有効性を確認するのは、剪定ノードだけで十分ですが、剪定ノードも最初はすべてのブロックをダウンロードする必要があります。当然他の剪定ノードはもう古いデータを削除してしまっているため、他のノードからダウンロードしなくてはなりません。そのときデータを提供するのがアーカイブノードです。剪定ノードもアーカイブノードもどちらもフルノードであり、直近の取引の検証という意味では違いがありませんが、アーカイブノードもビットコインネットワークのためには重要な存在と言えます。

フルノードを運用するメリット

ビットコインはフルノードを運用するインセンティブがない!とよく言われ、確かにそれに反対する人は少ないでしょうが、全くゼロかというとそういうわけでもないので、簡単に説明してみたいと思います。

セキュリティとプライバシー

前半で説明したように、軽量型のSPVウォレットは、ブロックチェーン全体やブロック自体、トランザクションそのものの正当性を自分では検証できず無条件に正しいものと信じるようになっています。ただし、軽量型であっても現実的には一つではなく複数のフルノードからの情報を比較・検証するので、単一のノードから送信された不正なブロックは実際上は弾かれることになります。たまたま接続したいずれのフルノードもビットコインのルールに違反する不正なブロックを有効なものとして伝達していた場合は、防ぐことができませんが、現状そこまでフルノード数は減少していないので、リスクは無視できるほど小さいものです。

フルノードを利用していれば自分ですべてのブロックチェーンを検証できるので、他のノードをそもそも信用する必要がありません。もちろん前述のように、不正なブロックチェーンを有効と認識してしまうような現実的なリスクはかなり少ないと思われるので、気分以外に普通のユーザーがフルノードウォレットをセキュリティ面で利用するメリットは、フルノードの運用コストと比較するとほぼゼロと言えるでしょう。

もう一点がプライバシー面です。軽量型のウォレットは実装によって多少の差はあるものの、基本的には特定の複数または単一のフルノードに自分のアドレス情報などを伝達しないといけないので、そのノードにIPアドレスとアドレス情報などが結び付けられてしまいプライバシーがダダ漏れになってしまう可能性があります。フルノードは自分が作成したトランザクションだけではなく他のノードから受け取ったトランザクションも同時に伝達するので、他人のトランザクションと紛れてどれが自分のトランザクションかわからなくなりますが、軽量型のSPVノードは自分が作成したトランザクションしか送信しないと考えると、プライバシーのリスクの差が分かりやすいと思います。

とはいえ通常のユーザーであれば、そもそもフルノード側もいちいちそれが誰のトランザクションなのかなんて気にしないと思いますし実質的に気持ちの問題以外のリスクはないと思います。

攻撃のターゲットになりやすい多額のBTCを保有している資産家の人や有名人なんかはプライバシー面が大きなメリットになる場合もあります。

セキュリティ・プライバシー面を考えてフルノードを運用するには?

実際にセキュリティやプライバシーの観点からウォレットにフルノードを利用したい!となった場合、いろいろな困難が付きまといます。

まず、ブロックチェーンが常に同期状態でないといけないため、コンピュータを常時起動しておく必要があります(1日放置しただけで検証に結構な時間がかかります。)。さらに問題となるのが、自分が自宅サーバーなりVPSとして運用している特定のフルノードに直接接続できるウォレットがかなり少ないということです。

フルノードをインストールしているコンピュータに直接ウォレットをインストールするのはいろいろと不便ですし、他のPCのウォレットからであったり、スマホのウォレットからであったり、外出先であっても自分のフルノードに接続できると便利でしょう。しかし、知る限り現状では特定のIPを指定してノード(Bitcoin Core)に接続、通信が可能なのは、PC用のmSIGNA、Android用のBitcoin Wallet(Schildbath wallet)のみです。

例えばCopayであったりElectrumであったりは専用のサーバーを別に立ち上げなければなりませんし、そもそも特定のサーバーに接続できないSPVウォレットも多く存在します。

ウォレット用途でフルノードの運用を考える場合は、そこらへんをよく調べておいたほうが良いかもしれません。

ネットワークへの貢献

もう一つのメリットがネットワークの貢献です。とはいえこちらも気分の問題なのでメリットといえるかどうかは怪しいところです。

現状、ビットコインのノード数はかなりの減少傾向にあるとはいえ、問題となる領域には達しておらずまだまだ安全な状況だと思います。とはいえ危険領域になってからでは遅いので今から貢献しておいてもいいかもしれません。

実際フルノードを運用するとなったときいくつかの選択肢があります。

外部からのノード接続を受け入れるか(ポート開放するか)

通常、フルノードを運用するにはポートを開ける必要はありません。ただし、ポートが空いていないと外部からのノード接続は受け入れないので、自分が一方通行的に適当なノードと接続するだけで、ネットワークへの貢献としては小さくなります(ネットワーク帯域を消費するだけの存在なのでむしろ害であると主張する人もいます。)。

ただしノードとの接続数が多くなればなるほどメモリの消費量などが多くなるので、使用するコンピュータによってはスペック上難しい場合もあります。

ちなみによくビットコインノード数として公開されているデータはポート解放されているノードの数だけであり、実際に運用されているフルノードはもっと多いと考えられます(そもそもポート解放されていないと、自分から接続しに行かない限り、第三者からはそのコンピュータがノードであると認識・接続できないので取得しようがありません。)。

アーカイブノードか剪定ノードか

前述のようにブロックチェーンをすべて保存するかしないか、を選ぶことが可能です。アーカイブノードのほうが役割は多いですが、剪定ノードでも十分フルノードとしての役割を果たせるので、コストを考えて選ぶと良いでしょう。

VPS・クラウドか自宅ノードか

ネットワークへの貢献を考えるなら自宅ノードのほうが良いでしょう。VPSのノードがいくら増えたところで、VPSはあくまでも仮想サーバーでしかなく分散されていないので、攻撃などにより同一のVPSを利用しているノードが同時に影響を受けるリスクがあります。また、例えばAmazon AWSがビットコインノード利用禁止!と掲げた場合には一斉にAWS上のノードは中止を強いられます。

実際の運用コストや安定性を考える場合にはVPSのほうがいいかもしれません。AWSなんかはノードを運用しようと思うとコストがかさんでしまいますが、海外の格安VPSを利用すればかなり安く運用することができます。

自宅ノードではインターネット回線の帯域制限があったり、コンピュータの故障リスクなども大きいので、ビットコイン関連のサービス運用に利用するにはVPSやクラウドを利用するのが安定だと思います。

終わりに

ということで、割と本気を出してアーカイブノード&自宅ノードの運用をはじめましたが、100GBを超えるブロックチェーンの同期にあと1日~2日ぐらいかかりそうなので、同期が終わった後にまた記事を書きたいと思います。

【独自トークン】初配当を実施しました。(独自トークンプラットフォームの配当機能について)

サイト運営

当サイト・ブログの独自トークンJPBITPTを保有している方向けに各プラットフォーム上の通貨で50%分の配当を実施しました。元々記念トークン、実験トークンという位置づけですが、1年近く経っていて保有者向けに何もお返しできていなかったので、1月のサイトからの収入が多かったこともあっての配当です。

記念トークンという位置づけは変えないつもりでこれが最後かもしれないので、今後の配当は期待しないでください。

 

せっかく、配当を行ったので簡単に「配当機能」についてまとめておきます。独自トークンの配当機能といっても各プラットフォームで違いがあり、現在ウォレットに機能として実装されているのがCounterpartyとNxtのみです。

ただし、配当機能というのは、要するにブロックチェーンから各アドレス・アカウントが保有するトークン量を読み取り、それに合わせてコインを配布する、というだけのものなので、プロトコルなどのバックエンド・根本的なシステムの問題ではなく、基本的にはウォレットやその他送金ツールなどのフロントエンドの機能です(トランザクションのタイプとして「配当」というものをプロトコル実装して、配当時だけ特別に送金手数料を安くする、といった機能は考えられますが・・・)。

そのため、プログラムが書ける人はAPIなどを利用すれば、自力で割と簡単に配当ツールを作れるのではないかと思います。今回利用したBitShares、NEM、Ethereumは、現在のところウォレットに機能が実装されていませんが、トークン保有者が少数だったので、手間を考えて手動ですべて送ってしまいました。

Ethereumなんかは、特に自由にプログラムが書けるので、毎月トークン保有者に自動的に配当を送るとか希望者が特定のアカウントにメッセージを送ることで自主的に配当をもらうことができるとか、いろんなかたちの実装が考えられます。

ということで、配当ということだけを考えた場合は、現状でもツールを作ろうと思えばどれでも作れるので、真面目なビジネス用途のトークンはどのプラットフォームを使おうと構わないのですが、非技術者のお遊び程度であれば、現状はCounterpartyとNxtの二択ということになると思います。とはいえ、実際は利用者が多いことが何よりも重要なので、特定のプラットフォームに思い入れがない限りCounterparty一択になってしまいますが。

利用者数という面を考えるとNEMもよさそうですが、作成手数料(約5500XEM)を考えると現状はちょっとハードルが高い感じがします。NEMに関してはmijinとかcatapultとかプライベート方面を先に攻めていっている印象なので、そこがある程度終わってからNEM自体の環境整備(分散型取引所の実装とか)に期待というところでしょうか。