送金処理後のブロック追加について

suzu ()
初めまして。
mijinクラウドチェーンβを利用させていただいております。

昨日あたりから送金処理を行うと、
送金処理自体はエラー発生せず完了するのですが、
その内容がブロックに追加されず"unconfirmedTransactions"のままとなります。

LightWalletとTakanobuさんが作成された送金サンプルJSのどちらでも同事象が発生します。

以前同じように送金処理を行ったときは、数分も待たずにブロックに反映されていました。

本事象について何か情報ありませんでしょうか?
宜しくお願いいたします。

Takanobu ()
suzuさん、はじめまして。

深く追っていませんが、こちらの環境で試してみたところ、
LightWallet と私の作成したJS のどちらでも送金に成功するようです。

マルチシグ設定をした場合に承認権の無いユーザ(Alice等)がLightWalletを確認すると、
unconfirmedTransactions に残ったままとなる状況は、以前に確認しております。
(承認権のあるユーザの場合は承認ボタンのようなものが出てくるのでおのずとそれと分かります)

心当たりはございませんでしょうか?
とりいそぎ。

Takanobu ()
suzu さん、本件解決しましたでしょうか?
私の方の環境でも現在似たような状況が発生しました。

API /account/unconfirmedTransactions

で情報を取得したところ、meta情報(innerHash等)が抜け落ちているようで、
処理が続行できないような状況のように見えます。

フォームにて確認してみますので、
しばらくお待ちください。

takao ()
またさくらさんの障害ですかね?

takao ()
ヘビーな障害の場合、私が翻訳して開発本部に取り次ぎます。

Takanobu ()
状況が再現しましたので、報告しておきます。

アカウントを同時に5つ作成。
そのうち3つにXEMを送金。
そのうち2つをマルチシグにコンバート
のこりの1つにXEMを再送金。

上記手順をプログラムで高速に行いました。
すると、最後のトランザクションの返事が
message=NEUTRAL
となり(本来はSUCCESSです)
それ以降のトランザクションを一時的に受け付けなくなるようです。

おそらくこれはmijinの仕様(無償版のトランザクション制限)かと思われます。
秒間25トランザクションとはいいつつも、ミリ秒単位で計算するともう少しゆっくり処理しないとだめなのかもです。

77万円をケチった代償がここに現れましたw
今後タイマーかましながらゆっくりトランザクション発行します。

とりいそぎ、ご報告まで。

takao ()
25はじつはConfigによるソフトウェア制御ですから、超えると強制で止められます。
しかし、本件がそれに該当するか分かりませんので確認します。

おそらくこれはmijinの仕様(無償版のトランザクション制限)かと思われます。
秒間25トランザクションとはいいつつも、ミリ秒単位で計算するともう少しゆっくり処理しないとだめなのかもです。

takao ()
Takanobu このマルチシグへのコンバートはエラーを出して失敗ですか?それとも成功?

そのうち2つをマルチシグにコンバート

takao ()
ネットワーク上で既知のトランザクションであるとこのエラーが出るそうですから、リクエストが重複してませんか?

message=NEUTRAL
となり(本来はSUCCESSです)

Takanobu ()
追加の情報です。

私の環境で出現しておりました、Unconfirmed transactions が処理されない件ですが、
別の方法でも再現しましたので報告しておきます。
今回はリクエスト重複しておりません。

・アカウントを同時に3つ作成(ユーザ用、ウォレット用、銀行用)
・マスターアカウントから銀行に500xem送金
・マスターアカウントからウォレットに500xem送金
・ウォレットをマルチシグにコンバート(署名者:ユーザ)
・ウォレットのマルチシグに署名者:銀行を追加

上記トランザクションを高速に実行すると、すべてmessage=SUCCESSが返ってきますが、
実際にはマルチシグは形成されていません。
また、それ以降のトランザクションが実施できなくなります。(1時間程度?)

取り急ぎ、ご報告まで。

takao ()
可能であれば、このスクリプト頂いた方が解決は速いかも知れません。

追加の情報です。

私の環境で出現しておりました、Unconfirmed transactions が処理されない件ですが、
別の方法でも再現しましたので報告しておきます。
今回はリクエスト重複しておりません。

・アカウントを同時に3つ作成(ユーザ用、ウォレット用、銀行用)
・マスターアカウントから銀行に500xem送金
・マスターアカウントからウォレットに500xem送金
・ウォレットをマルチシグにコンバート(署名者:ユーザ)
・ウォレットのマルチシグに署名者:銀行を追加

上記トランザクションを高速に実行すると、すべてmessage=SUCCESSが返ってきますが、
実際にはマルチシグは形成されていません。
また、それ以降のトランザクションが実施できなくなります。(1時間程度?)

取り急ぎ、ご報告まで。

Takanobu ()
本件の問題点を整理させていただきます。

mijinのマルチシグ機能について、マルチシグコンバートが完了する前にマルチシグ署名者追加リクエスト をしよ うとするとmijin全体が止まってしまいます。
止まっている期間はマルチシグのトランザクション有効期限に依存し、その期間は関係ないアカウント同士のト ランザクションも処理されません。
マルチシグコンバートリクエストは応答メッセージがSUCCESSのため、一見成功したように見えますが実 際にはコンバート処理は実施されません。
mijinの内部を知らないので判断できませんが、NEMも同様の動作をする可能性があります。

かなりヘビーな問題かと思われます。
他に検証中の方、ご確認よろしくお願いします。
(このコメントは管理者判断で削除していただいて結構です)

Takanobu ()
今回の件で、mijinが応答するSUCCESSの意味に対しての理解が深まりました。

例えば、A→B へ送金し、SUCCESSを確認した後、
Bに入金されるだろうxemを当てにしたB→Cへの送信もSUCCESSとなり、
その後、分散されたサーバ間でそのつじつまを合わせるように、データが伝播されるのですが、

ここで、マルチシグなどのコンバート失敗によりトランザクションが長期保留状態になり、
その間に上記送金トランザクションの有効期限が切れた場合、送金は行われません。
データが消失するわけではありません。送金されなかったことになるだけです。

特に外部DBと連携などする場合、SUCCESSが
必ずしも送金成功を意味するわけではないことに注意が必要です。

suzu ()
Takanobuさん

はじめまして。
ご確認いただきありがとうございます。

マルチシグ設定はしていないはずなので今回の件とは関係ないと思うのですが、
別ユーザでLightWalletを確認するなどしてみます。

ありがとうございます。

Takanobu ()
あ、今処理されました。ビットコインと比べたら速いといえば速いですが。。。
この待ち時間はちょっと致命的なのでもう少し調べてみます。

Takanobu ()
ありがとうございます。
こちらの環境にもありえない数値を投げつけるバグを発見しまして(汗
しばらく精査して、再現するようであれば報告させていただきます。

Takanobu ()
トランザクション発行後のステータスとしては
message=SUCCESS が返ってきております。

しかし、API /account/get で確認してみると、
cosignatories:[],cosignatoryOf:[],status:LOCKED,remoteStatus:INACTIVE}
となっているので、作成には失敗しているようです。

Takanobu ()
お忙しいところすいません、私用で退席させていただきます。
また明日よろしくお願いします。

Takanobu ()
おはようございます。原因がわかりました。

再現例4つ目、”のこりの1つにxemを再送金。”にて
2つ目で既に送金した相手に対し、同じタイムスタンプで同じ金額を送金しようとしていました。

これがリクエスト重複となり、送金元がneutral状態になったのかもしれません。
金額を変更すれば問題なく SUCCESSとなりました。
以後このような処理が発生しないように気を付けます。

ご指摘ありがとうございました!

Takanobu ()
マルチシグ検証のためのサンプルプログラムを作成しました。

マルチシグを自在に扱うにはjsなどのスクリプトでは手に負えなくなってきておりますので、
javaプログラムのご提供で検討いただければと思います。

zipで固めて4MBを超えるサイズになりますが、どのようにご提供させていただければよいでしょうか?
(4MBのうちほとんどがライブラリで、検証プログラムは実質100行程度です。)

なおサンプルプログラム作成中、
・マルチシグコンバート失敗後、再びトランザクションが処理されるのは、失敗したトランザクションのdeadlineに依存する(私の場合1時間でした)
・マルチシグコンバートに失敗すると、関係のないアカウントのトランザクションも受け付けなくなる。
などが判明しました。