Zaif取引所におきまして、8/27の未明から8/29の日中まで、お客様による一部のBTC出金につきまして、システムの不具合により多重送金を行ってしまう不具合がありました件につきましてお知らせいたします。
概要
8/27の未明から8/29の日中まで、ビットコインの出金処理を行っておりますサーバーとネットワークの過負荷により、BTC出金システムに異常が発生し、一部のお客様の出金リクエストに対して複数回出金処理を行ってしまうというトラブルが発生しました。この多重送金分についてこちらで集計と確認を行い、本日8/30付でサポート担当よりお客様個別にお返却のお願いをメールで送信させていただきました。
対応と完全な事態の把握に時間がかかってしまいましたが、8/28からの対応が完結するまでの8/29に一部同様の障害が再発してしまい、再度それについての対策を行っておりましたため、多重送金分の確実な集計や該当するお客様へのご連絡には1日を要してしまいました。
この多重送金分によるBTC多重送金量の総額と対象者数につきましては、外部へのセキュリティ上の理由からも公開を控えさせていただきますが、顧客資産のBTC分の1割にも満たない額であり、弊社セーフティネット上のしきい値を超えるものではないため、運用上・キャッシュフロー上の問題はなく、取引や入出金は停止すべきではないという判断の下、取引所の運営については通常通り行っております。
お客様BTC資産の保全について
運用上は問題ないと判断したと上には表記しましたが、今回多重送金されましたBTCにつきましてはお客様からの預かり資産であり、Zaifではその全額を保全する必要があると考えています。多重送金分につきましては該当するお客様に個別に返却をお願いしておりますが、お客様の状況によっては、弊社からの連絡よりも以前に他サービスへの変換・他通貨との交換などにより元の金額から差損が生じている可能性があります。今回の事故につきましては、それら差損分についてZaif側で補償すべきと考えています。既に該当するお客様には個別にご連絡させて頂いておりますが、詳細に関しましてはお客様ごとの対応となりますので、お手数をおかけしますが本件に関するご質問はサポートへご連絡くださいますようよろしくお願いします。
詳しい原因と再発防止策について
直接の原因としましては、弊社でビットコインの送金に使用しているサーバーとネットワークの負荷が過大となり、ソケット通信が途中でキャンセルされることにより、出金処理の実行結果が正しく取得できなかったためとなります。通常の出金処理の流れは下記のようになります。
1.お客様が出金リクエストを送信し、Zaifサイト内のデータベースに記録される。
2.データベースの内容に応じて、ビットコイン出金処理を行う処理が実行され、ビットコインの送金を実行するサーバーに送金リクエストが投げられる。
3.ビットコインの送金を実行するサーバーから送金完了と同時にトランザクションIDを受け取り、それをデータベース上に記録して完了。
エラーとなった場合は、下記のように処理されます。
1.お客様が出金リクエストを送信し、Zaifサイト内のデータベースに記録される。
2.データベースの内容に応じて、ビットコイン出金処理を行う処理が実行され、ビットコインの送金を実行するサーバーに送金リクエストが投げられる。
3.ビットコインの送金を実行するサーバーから送金失敗の返事を受け取り、それをデータベース上に記録する。
4.送金失敗したものについては、3分以上待ってから2へ戻り、出金が成功するまで繰り返す。
エラーとなります原因につきまして、主なものは、出金用ウォレットの残高不足・出金トランザクションの作成に時間がかかりすぎてタイムアウトする、などがあり、これらの場合は自動的に再送されることにより正常に処理されていました。
27日土曜日以降発生した多重送金につきましては、上記の今までの処理に置きまして、下記のような状態になってしまったものでした。
1.お客様が出金リクエストを送信し、Zaifサイト内のデータベースに記録される。
2.データベースの内容に応じて、ビットコイン出金処理を行う処理が実行され、ビットコインの送金を実行するサーバーに送金リクエストが投げられる。
3.ビットコインの送金を実行するサーバーからの返事の受け取りに失敗し、ソケットのタイムアウトエラーとしてデータベース上に記録する。
3.b.ここで送金を実行するサーバーは極端に返事を行うのが遅くなっていただけで、実際は送金が完了していたため、重複した送金となり、トランザクションIDはZaifのデータベース上に記録されないものとなった。
4.送金失敗したとみなされたものについては、3分以上待ってから2へ戻り、出金が成功するまで繰り返す。
4.b.上記を繰り返すことにより、Zaifのデータベース上に記録されるまで同じ送金が重複して何度も実行されてしまった
再発防止策としまして、下記のようにいたしました。
1.お客様が出金リクエストを送信し、Zaifサイト内のデータベースに記録される。
2.データベースの内容に応じて、ビットコイン出金処理を行う処理が実行され、ビットコインの送金を実行するサーバーに送金リクエストが投げられる。
3.ビットコインの送金を実行するサーバーから送金失敗の返事を受け取り、それをデータベース上に記録する。
4.タイムアウトエラーを除き、明らかに送金失敗したものについては、3分以上待ってから2へ戻り、出金が成功するまで繰り返す。
通常の出金処理は上記のようなものとし、タイムアウトエラーがおきた出金につきましては、別途トランザクションを調査し、該当するものがあればそれをセット、該当するものがない場合は再送リクエストを行う、という別の処理を追加しております。
また、出金用サーバーの過負荷につきましては、より処理能力の高いサーバーへの移行作業を行っており、今週中には置き換えを行う予定になっております。
ビットコインの入出金は現在動作しており、本改修以降は重複した出金が発生することはございません。ただし、アップグレード中もネットワークなどの負荷により、一部出金のエラーが発生することがございますが、その場合は事故が発生しているものではなく、文言通り出金自体にエラーが発生している状況となります。その際は、所定の方法でサポートにご連絡いただけましたら、すぐに再出金の手続きを対応させていただきます。
Zaifでは、出来る限りの利便性向上を目的として、ビットコイン入出金処理に関してもリスクを計算の上、出来る限りお客様に短時間で処理できるようサービスとシステムの改善に努めてまいりました。今後も身を引き締め、それらの最大化を目指しつつも、安全性につきましてもさらなる向上を目指してまいりたいと思います。
本事故に該当するユーザー様には、多大なるご迷惑とご心配をお掛けしましたが、お手数ですがご協力をお願い申し上げます。
我々サービス運営者と開発者一同、今後もさらなるサービスの改善に努めてまいりますので、何卒Zaifをよろしくお願いいたします。