IOTA:【メモ】ペンディングに負けるな。

#はじめに
本当はこんなコーナーを設ける予定はなかったが記事の執筆用のテスト中にトラブルに見舞われたためメモ程度に書くことにした。
まず、同じようなトラブルに見舞われている人々の叫び集

---
>[ずっと待機している。助けてくれ](https://www.reddit.com/r/Iota/comments/6gb5ot/transaction_stays_on_pending_help_would_be/)
>>ウォレットのバージョンが古いと判明。アップデートしてみた。
しかし、受け取るトランザクションがペンディングしていたので質問者は受け身状態。この場合はどうしたらいい？
>>>解答なし...

---
>[12時間ペンディング待ってんだけど...](https://www.reddit.com/r/Iota/comments/6h5emr/my_transfer_is_still_pending_12_hrs_later/)
Bitfinexから送金したのにまだ来ない。いろいろやってんのに。
>>Bitfinexが[メンテナンス中](https://twitter.com/bitfinex/status/874877074154160128)だった。
>>>解決？

---
>[5時間待ってる。](https://forum.iota.org/t/resolved-transaction-is-pending-for-more-than-5-hours-no-balance/2425)
>>再ブロードキャスト。再アタッチ。IPも変更した。全てやっている。**俺は１週間待っている。**一体どうなっているんだ...以下、IOTAの愚痴と開発者をディスりまくる。

---
...と言った具合。今のところネットを探っても有益な情報は見つからず。どこをのぞいても技術を知る人が解答する例はなし。あえて確認事項があるとすれば以下の通り。
#確認ポイント
まず、Attach to Tangle（タングルにアタッチ）で生成された空のトランザクションは必ずしも承認される必要はないので、ペンディングでも大丈夫という証言を[ここ](https://matthewwinstonjohnson.gitbooks.io/iota-guide-and-faq/content/getting-started/rece.html)で得られた。(追記:2017/7/28)

|ポイント|備考|
|:-----------------|:-----------------|
|待機|基本的な対処法。たぶんこれで解決しないから、人はネットに答えを求めるのであって...|
|再ブロードキャスト（Rebroadcast）|'記録'の*バンドル表示*からできる。この操作は９マイルストーンが経つと効果を[持たなくなる](http://iotasupport.com/gui-sendingandreceiving.shtml)ため、その場合は再アタッチをする。|
|Reattach（リアタッチ、再アタッチ、リプレイ、Replay）|1時間ごとに１回ずつ行う。もし、５回リアタッチしてもダメな場合はホストを変更する（ツール->ノード設定編集->ドロップダウンメニューから選択）[こちら](https://qiita.com/ABmushi/items/1481e5c2f9485abfcca3#%E3%83%9B%E3%82%B9%E3%83%88%E3%83%8E%E3%83%BC%E3%83%89%E7%8A%B6%E6%85%8B%E3%81%A8%E3%81%AE%E9%96%A2%E9%80%A3)も参照|
|ウォレットは最新バージョンか？|バージョン情報は[ここ](https://github.com/iotaledger/wallet/releases)。もし、[Tangle Explorer](https://iotasear.ch/)でConfirmedになっているのにウォレットでペンディングならこの可能性が高い。|
|ホストのIPを変更する|ノード設定編集から、ノードのIPとPORT番号を変更する。※[ノードリスト](http://www.iotasupport.com/lightwallet.shtml)|
|Bitfinexのメンテナンス|[公式Twitter](https://twitter.com/bitfinex)でお知らせがあるそう。もちろん、Bitfinexが関係するのは取引所に入金したり、から出金するトランザクションの場合のみですが。|
|Bitfinexに連絡|英語ができないとですが...。送金キャンセルといった対応もできるようです。|
|新トランザクションを作って送金者に再送金をお願い|ペンディングだからって何度も送金（replay）した場合、**二重支払い**判定された可能性がある。二重支払いのトランザクションは片方のみ承認される。もう片方は**永遠に承認されない**。replayは15分ごとに実行する必要がある。もし、合計4回、1時間待っても[Tangle Explorer](https://iotasear.ch/)でBalanceが0なら別のトランザクションを作り直す。[詳細](https://iotatangle.slack.com/archives/C5QA98BSA/p1496870240957310)|

##再ブロードキャストと再アタッチの違い
再ブロードキャスト：近隣ノードに情報を再送信して同期を促す。
再アタッチ：０から同じトランザクション（正確にはBundle）をもう一度PoWを行って生成しなおすこと。

##ホストノード状態との関連
　IOTAのフルノードは正しく動作するために必ず満たすべき条件というものがある（詳細は[こちら](https://qiita.com/ABmushi/items/6b8413c1fb510e716d58#%E8%87%AA%E5%88%86%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AF%E6%AD%A3%E5%B8%B8%E3%81%8B)）。そのため、ウォレットのホストノードの状態によってはいつまでたっても送金が承認されない場合がある。そのためホストのIP選択は重要である。ただこちらからはどのホストがいい状態にあるのかは事前に分からないので、信頼されているホストにリクエストを送れる[再アタッチャー](https://reattach.iotalpha.io/)というものもある。使い方は、再アタッチしたい送金のBundleのハッシュを貼り付けるだけだ。

#まとめ
　このような不具合の原因が何にあるのか。改善できるものなのか。それとも今後もIOTAに内包され続ける厄介な仕様になるのか。しかし、真にIoT界のドルになるためには、安定した環境構築は必要だと思う。
　ビットコインと違って、IOTAではP2Pネットワークをフルノード間で手動でIPを交換し合って構築していることもあり、もし不安定なノードがあるとその分ネットワーク全体が不安定になってしまっている可能性もある。将来ノードのIP交換について対処法を提案すると財団も提言しているのでそれに個人的に大きく期待している。特にIOTAは採掘による分かりやすい金銭と言う利益をフルノード管理者が得られない。フルノードとしてP2Pに参加するモチベーションを他の仮想通貨と違うところに見いだす必要がある分、参加障壁の小さなインフラ作りがIOTAネットワークにとって重要だと思う。