初版(v1.0.0.0-g32a928e)でのバグ
分流の対処がうまくいかない問題
危険度レベル
- 通貨としての価値がなくなるくらい
どんな問題?
- 解説
http://anago.2ch.net/test/read.cgi/software/1400084929/670 670 :名無しさん@お腹いっぱい。:2014/05/27(火) 00:19:14.80 ID:PuxVnbqM0 原因がわかった人がいるようですが、私も調べていたので、 自分なりにわかったことを書いておきます。 結論から言うと、CBlock::ConnectBlock中のGetProofOfWorkReward()にはpindexを渡す必要があると思います。 そして、GetProofOfWorkRewardのGetDifficultyにpindexを渡さないと正しいdiffが取れないと思います。 Litecoinの該当コードも以下のようにpindexを引数とするReward関数になっています。 if (vtx[0].GetValueOut() > GetBlockValue(pindex->nHeight, nFees)) https://github.com/litecoin-project/litecoin/blob/master-0.8/src/main.cpp#L1720 勘違いの場合はごめんなさい。
http://anago.2ch.net/test/read.cgi/software/1400084929/671 671 :名無しさん@お腹いっぱい。:2014/05/27(火) 00:24:39.26 ID:uiCRFq3M0 ああ、説明書き直してる間に別の人がw >>670 自分も同じ結論に至ったよ。 Reorganize()でチェーンを繋ぎ直すときにConnectBlock()からGetProofOfWorkReward()が呼ばれるけど、 そこから呼んでる引数無しのGetDifficulty()は最新のdiffをとってきてしまう。 最新じゃなくてチェーンの分岐点にさかのぼって特定の時点のブロックが正当かどうか判断するために 呼んでるから最新だとまずい。
- わかりやすく言うと
http://anago.2ch.net/test/read.cgi/software/1400084929/977 977 :名無しさん@お腹いっぱい。:2014/05/27(火) 20:33:12.49 ID:ty1XoHcH0 ビットコインの論文によれば、 計算資源の少ない方のブロックチェインは自動的に放棄されるはずですが、Ringoコインではなぜそれがされないのでしょうか? システムで放棄されるべきブロックチェインを、手動で放棄しなければならないのが現状の状況のようにみえます。
http://anago.2ch.net/test/read.cgi/software/1400084929/980 980 :名無しさん@お腹いっぱい。:2014/05/27(火) 20:36:29.47 ID:uiCRFq3M0 なんだ、作者の人行き詰まってしたらばの方に書いてたのか・・・ >>977 diffの取得処理にバグがあって、正しいチェーンに切り替えようとしても 正規のブロック報酬を不当な報酬と誤認して弾いてしまうので切り替えられない。
http://anago.2ch.net/test/read.cgi/software/1401192211/30 30 :名無しさん@お腹いっぱい。:2014/05/27(火) 21:21:07.34 ID:uiCRFq3M0 >>前スレ983 ちょっと違う。長い方の判定はできていて、切り替えようとはしているんだ。 ちょっと長いけど例を挙げて説明すると、 ブロック100まで共通で101から分岐して101-aと101-bができてしまったとする。 ここで101-aの方に先に102-aが作られると101-aのチェーンが長いから本流と認識される。 ここまでは暗号通貨の日常風景。 101-bを先につかんでしまったクライアントは101-aの方への切り替えをしようとするけど まず101-aの報酬が正しいかチェックする段階で 本来: 101-aの報酬を、【直前の】100のdiffから算出 現状: 101-aの報酬を、【最新の】101-bのdiffから算出 → 報酬高すぎる。不正データなので拒否。 ということになってしまっている。
今本流にいるの?それとも分流?
- この問題は、他の人間のブロックチェーンを見ないと確認できないです。
- やり方 その1
- 信頼性・大/お手軽度・小
- ヘルプ→デバッグウィンドウ→コンソール"タブ"したのボックスに"getinfo"と入力してスレに貼る。
- 自分よりblocksがとても多い人がいたらあなたは分流です。
- 逆に自分よりblocksがとても少ない人がいたらあなたは本流の可能性が高いです。
- みんな一緒の場合は、分流はおそらくありません。
- 2chにいない人が分流にいるかもしれません。
- ※ 分流は、大抵の場合は2つの場合が多いですが、複数できる場合があります。
- やり方 その2
- 信頼性・中/お手軽度・大
507 :名無しさん@お腹いっぱい。:2014/05/28(水) 22:03:45.30 ID:Ivo3fLNq0 >>504 了解 なかなか難しいな <自分が本流にいるかどうかの確認方法Ver3.0> 1、abeでブロック数のリンクをクリック http://abe-ringo.luna.ddns.vc/ 2、ウォレットのデバッグウインドウのコンソールに getblockhash abeで確認したブロック数 を入力 3、表示されたハッシュ値とabeで表示されたブロックのハッシュ値が一致してて、 4、なおかつgetinfoで表示されるpowのdifficultyが大きな値(1以上)であれば本流 5、ただし、他の人たちも皆支流にいる場合abeが支流になってしまっている可能性有り
- 信頼性・中/お手軽度・大
- getingoの例
{ "version" : "v1.0.0.0-g32a928e", "protocolversion" : 60013, "walletversion" : 60000, "balance" : 2909.86580204, "newmint" : 0.00000000, "stake" : 0.00000000, "blocks" : 3934, "timeoffset" : -1, "moneysupply" : 3414350.30480760, "connections" : 47, "proxy" : "", "ip" : "000.000.000.000", "difficulty" : { "proof-of-work" : 0.22908088, "proof-of-stake" : 0.03116440 }, "testnet" : false, "keypoololdest" : 1400997707, "keypoolsize" : 101, "paytxfee" : 0.00000000, "mininput" : 0.00000000, "errors" : "" }
解決策
- v1.0.3.1で修正された模様。
- 念の為に、バックアップをとっておくこと。ヘタするとRingoが消えます。
- 作者公式サイトから最新版を落とす。
- 一旦ウォレットを落としてRingo.conf(ない場合は無視)とwallet.dat以外を削除する。
- その後、念の為PCを再起動してからRingo-qtを起動してくださださい。
- 同期が完了するのを待つ。
- その後、自分がちゃんと本流にいるかを確認すること。
- もし下の対処法を使った人がいたらRingo.confのmaxconnectionsの行は必ず消すこと
- ここから下は念の為です。
- もし治っても再発症する可能性が高いです。
- ここから下は、2014-05-27のみの情報です。
次回解決方法として使えるとは限りませんのでご注意ください。- こちらはおすすめしません*1が一応本流に行けます。
- よくわからない場合は、修正版が出るまで静観すること。ringoが消える可能性があります。
- 念の為に、バックアップをとっておくこと。ヘタするとRingoが消えます。
- 一旦ウォレットを落としてringo.confに下の□の中の4行を加えてください。
- その後、念の為PCを再起動してからRingo-qtを起動してくださださい。
- その後、自分がちゃんと本流にいるかを確認すること。
150 :LA pool:2014/05/27(火) 23:12:05.53 ID:TQ8S8fUE0 addnode=pool1.xau.jp:9393 addnode=pool1.xau.jp:9394 addnode=pool2.xau.jp:9393 maxconnections=3 もしうちにつなぐとしたらこれでお願いします。