支払い処理でエラーになっていた
/mpos/logs/payouts のログを確認したら
なぜに?
マイニングした報酬はタップリあるハズなにのー
さらに、ログを見ていくと、
z_sendmany で 「getrandom」とかエラーでコケてるでは無いか。。。
掘ったコインを一旦プライベートアドレスに転送して戻すって事を KOTO 用に自前で作った部分があるのだが、そこでのエラーw
なんと、6月の初旬に、デーモンを 2.0.4 にアップデートした時から発生していたのだ(汗)
なんですが、このエラーは。。。ググっても分からないし。。。
discordで見つかった
https://discordapp.com/channels/400107631810969609/400107631810969611/561444893764091906
この辺りが怪しいか
前にマイクラ公式サーバを動かそうとして、glibcがどーのこーのって。。。言われて ゴニョゴニョしたけど結局動かず
その時の悪あがきが悪さしちゃったかな(汗)
いいタイミングか、縮退しよ
Koto Mining Pool – 大人の自由研究 はピーク時に比べてアクセスも少なく、リソースが余っていた。
いつか縮退しようと思ってはいたが、、、アップグレードはボタンポチでできるのに、ダウングレードは出来ない(汗)Time4VPS.
ちょうど、更新日が3,4日後にあるので、この機会に、スペックダウンしたサーバを借り、そちらに移行しようと計画した。
OS は ubuntu18.04 です。
(今までは、ubuntu16.04 でした)
環境を構築して、WalletやDBをバックアップ&リストアし、新環境で動くようになった。
ドメインも切り替えて、MPOS管理画面からも見れるようになった。
移行についてはすんなりいったかな。
Invalid amount
新環境で可動させるも、今度は Invalid amount ってエラーが出る。
んー
koto-cli で sendmany を試してもエラーにはならない(汗)
curl経由 で も同様。
なぞだ。。。
これがまたエラーにならず送金できる時もあるという。。。
ソースみると Invalid amount は 小数点以下8桁超えた時にでるようだが。。。
/mpos/cronjobs/payouts.php の該当箇所
$aSendMany[$aUserData[‘coin_address’]] = $aUserData[‘confirmed’] – $config[‘txfee_manual’];
ここで、転送手数料を引いてるだけ。。。
そして、正体を突き止めた!
json_encode をすると、浮動小数点が(汗)
2019-06-19 01:50:05 – INFO –> {“k18CKcd3xf3ErU8Qpn8MCWspDYGBEvNqNMq”:2.5022580199999997}
2019-06-19 01:50:05 – ERROR –> E0078: RPC method sendmany did not return 200 OK: Address: k18CKcd3xf3ErU8Qpn8MCWspDYGBEvNqNMq ERROR: RPC call did not return 200: HTTP error: 500 – JSON Response: [-3] Invalid amount
なんてこったー!!
2.60225802 – 0.1 = 2.502258012
を期待していたが、
2.5022580199999997
とエンコードされている。
確かに、この値でリクエストすると、Invalid amount なる。
浮動小数点数の精度問題か(泣)
/mpos/cronjobs/payouts.php を 以下のように修正してみた。
$aSendMany[$aUserData[‘coin_address’]] = $aUserData[‘confirmed’] – $config[‘txfee_auto’];
↓
$aSendMany[$aUserData[‘coin_address’]] = floatval( strval($aUserData[‘confirmed’] – $config[‘txfee_auto’] ));
一旦文字列にして浮動小数点に戻すと(汗)
とりあえず、順調に可動している。
ブロックの発見があまり無いので、まだ送金の回数は少ないが、今の所は問題なく送金できているようだ。
ひとまず安心w
環境の違いか
気になるのが 何で json_encode で出るようになったのか!?
新環境は PHP7.2 にした、旧環境は PHP7.0 だった。この違いで json_encode の 浮動小数点の扱いが変わったのか。。。
検証用にサンプルプログラムを作ってみた
#!/usr/bin/php <?php $confirmed = 2.60225802; $txfee = 0.1; $amount = $confirmed - $txfee; echo json_encode( $amount) ."\n"; echo json_encode( floatval( strval( $confirmed - $txfee ) ) ) ."\n"; ?>
新環境
$ php -version PHP 7.2.19-0ubuntu0.18.04.1 (cli) (built: Jun 4 2019 14:48:12) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.19-0ubuntu0.18.04.1, Copyright (c) 1999-2018, by Zend Technologies $ php test.php 2.5022580199999997 2.50225802
旧環境
$ php -version PHP 7.0.33-0ubuntu0.16.04.5 (cli) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.33-0ubuntu0.16.04.5, Copyright (c) 1999-2017, by Zend Technologies $ php test.php 2.50225802 2.50225802
んー確かに。違う。。。
これは、設定とかで同じになるのでしょうか。。。
送金エラー対応
さて、落ち着いたら、送金エラーになったものを対応しようかな。
MPOSのtransactions テーブルを見ると、送信エラーになったものは、txid が入っていない。
それらをピックアップして、手動で送る。
送った時のtxidを テーブルに書き入れてあげれば、良さそうだな。
面倒な作業だが、幸いな事に そんな件数は多くない(汗)
件数が多ければプログラム作っても良いかもね。今後のためにw
さいごに
今回のトラブルのお蔭で、サーバーが縮退できた。月のサーバー費用も多少ではあるが安くなるw
が、マイナーの皆様にはご迷惑をおかけしました。。。
m(_ _)m
コメント