nem.coreでのminCosignatoriesの設定方法について

hayasitd ()
MultisigAggregateModificationTransactionのコンストラクタで
new MultisigMinCosignatoriesModification(count)などを指定して、
MultisigAggregateModificationTransactionを実行します。
たとえば以下のようなコード。

MultisigAggregateModificationTransaction transaction = new MultisigAggregateModificationTransaction(
timeInstant,
sender,
cogList,
new MultisigMinCosignatoriesModification(2));


その後、
http://XX.XXX.XXX.XXX:7895/account/get?address=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

を実行しても

cosignatoriesにアカウント情報は設定されますが、

"multisigInfo":{"cosignatoriesCount":2,"minCosignatories":0}}}

となっており、minCosignatoriesの値が設定されません。

minCosignatoriesを設定する方法をご存知の方いらっしゃいますか。

もしくは機能していないのでしょうか。

値が0にも関わらず、マルチシグトランザクションでは全員の署名(sign)がされないとconfirmされません。

Takanobu ()
これは仕様書には載っていないと思うので、私が感じることをかきますと、

minCosignatories が 0 の場合はminCosignatories は cosignatoriesCount の値に従います。 ですので、上記の例でいくと minCosignatories = 2 となります。
MultisigMinCosignatoriesModification が成功すると 間違いなく minCosigna tories に0以外の値が入るはずです。

考えられることとしては、
■NemAnnounceResult.messege にSUCCESS が返ってきていない。 文字通り失敗してます。
たとえばこんなエラー : FAILURE_MULTISIG_MIN_COSIGNATORIES_OUT_OF_RANGE

■SUCCESSが返ってきているが、マルチシグ生成・追加の直後に実行している、あるいはMultisig MinCosignatoriesModification の直後に別のトランザクションを発行しており、保留されている。
保留されていると書きましたが、これはおそらくmijinかNEMのバグで、このトランザクションが実行さ れることはありません。
以後すべてのトランザクションがこの保留されている期間、待たされることになります。中には期間切れで失効 するトランザクションもあるかもしれません(SUCCESSを返しているのに、です)

私の場合は、Unconfirmedトランザクションを監視し、すべてのトランザクションが処理されるまで スリープして回避しています。(早く改善してほしいところですが)

hayasitd ()
Takanobuさん
返信ありがとうございます。

>minCosignatoriesが 0 の場合はminCosignatories は cosignatoriesCount の値に従います。 ですので、上記の例でいくと minCosignatories = 2 となります。

こちら、了解です。ありがとうございます。


>■NemAnnounceResult.messege にSUCCESS が返ってきていない。 文字通り失敗してます。
>たとえばこんなエラー : FAILURE_MULTISIG_MIN_COSIGNATORIES_OUT_OF_RANGE

これが出るパターンもありましたが、
MultisigAggregateModificationTransactionがSUCCESSで返ってきて、cosignatoriesにアカウントが追加されたときでも
minCosignatoriesは0でした。

>■SUCCESSが返ってきているが、マルチシグ生成・追加の直後に実行している、あるいはMultisi g MinCosignatoriesModification の直後に別のトランザ>クションを発行しており、保留されている。

これなんですが、ほかのトランザクションは保留されていない状態で、
lightwallet上でみると、どのアカウントにもUnconfirmedトランザクションは残っていない状態です。

通常のアカウントをマルチシグアカウントに変換するときは、マルチシグトランザクションでラップするわけではないので、
初回のMultisigAggregateModificationTransaction実行時ですね。

マルチシグアカウントになった後で、マルチシグトランザクションでMultisigAggregateModificationTransactionをラップした場合は、
minCosignatoriesが設定されるのでしょうか。

Takanobu ()
>マルチシグアカウントになった後で、マルチシグトランザクションでMultisigAggregateMo dificationTransactionをラップした場合は、minCosignatoriesが設定されるのでしょうか。

こちら、特に指定しない限り0のままです。つまり、cosignatoriesCount の数だけ署名者が必要です。
SUCCESSが返ってきてUnconfirmedトランザクションにも残ってないのは不思議ですね。すでにタイムアウトしている可能性は無いでしょうか?

最小の手続きでminCosignatories の設定を行おうとすると、

1.Aliceアカウントを生成する
2.Bobアカウントを生成する
3.Aliceアカウントにコンバート手数料用XEMを送金しておく。
4.BobがAliceアカウントをマルチシグにコンバートする
5.BobがAliceマルチシグの最小署名者数を1に固定する。

の手続きが必要ですが、認識あってますでしょうか?
3と4の間、4と5の間に15秒ほどのスリープが必要かと思いますが、連続で処理されてませんでしょうか?

hayasitd ()
Takanobuさん

ありがとうございます。

MultisigAggregateModificationTransaction transaction = new MultisigAggregateModificationTransaction(
timeInstant,
sender,
cogList,
new MultisigMinCosignatoriesModification(2));


MultisigAggregateModificationTransactionはトランザクションですが、
MultisigMinCosignatoriesModificationはトランザクションではないので
上のようにMultisigAggregateModificationTransactionのコンストラクタの引数に指定して実行しています。

裏でどういう動きになっているかわかりませんが、

>4.BobがAliceアカウントをマルチシグにコンバートする
>5.BobがAliceマルチシグの最小署名者数を1に固定する。

は同時にやっているのではないかと。
スリープが必要だとなると、MultisigAggregateModificationTransaction以外に
別の指定の方法があるのでしょうか。

もう少し調べてみます。

Takanobu ()
外出先から失礼します。

もしかしたら同時にできるのかもしれません。
こちらで使用しているラッパーライブラリだと分けて考えてしまっており、その場合立て続けにトランザクション発行するとフリーズしてしまいます。

こちらも、明日調査してみます。

Takanobu ()
試してみました。マルチシグへのコンバートと最小署名者数の固定は同じトランザクションで処理できますね。
マルチシグコンバート時にMultisigMinCosignatoriesModification(1)を設定したところ、
{"cosignatoriesCount":1,"minCosignatories":1}
が設定されました。スリープも必要ないようです。

MultisigMinCosignatoriesModification(2)を設定した場合は
FAILURE_MULTISIG_MIN_COSIGNATORIES_OUT_OF_RANGE
となりました。要するに1にしか変更できないですね。

そこで 連署者を2名に追加時にMultisigMinCosignatoriesModification(1)を設定した場合の確認も行いました。
こちらはうまく動かないようです。
2名の追加までは反映されましたが、minCosignatoriesの変更が適応されませんでした。
タイムアウトまで粘る感じもなさそうでした。

取り急ぎ。

hayasitd ()
Takanobuさん

検証ありがとうございます。

こちらでもいろいろと試して、minCosignatoriesが反映されるパターンも確認しました。
1度にやらずにminCosignatoriesは別で設定したほうがいいのかもしれませんね。

ただ、別の問題がでてきて、
minCosignatoriesが設定されている(0以外)の状態だと、
連署人の削除が、自分のプログラムではうまく動かなくなってしまいました。
別途調査中ですが。
FAILURE_MULTISIG_MIN_COSIGNATORIES_OUT_OF_RANGE
のエラーばかりみています。

ただ、いったん、この質問はcloseさせていただきますね。

ありがとうございました。

Takanobu ()
close の件、了解しました。

すでにお気づきかもしれませんが、私もどえらい勘違いをしておりましたので後ほどメッセージします。
よろしくお願いします。