Osuke
Osuke
#431 において、`1. 暗号文生成からtx送信まで(並行処理しているので)`においてTxの順序が意図せず変わってしまいオンチェーンでrevertが発生するケースを緩和するために、Txを送信する前にStateRuntimeノードローカルで `GroupKeyCounter` を記録し、順序チェックをする。 もし順序が連続的でない場合は、一時的にバッファし、適切な順序になってからオンチェーンへTx送信する。 一方、この順序整合bufferをireruto,`senderAppkeyChain`をratchetしてからTx送信するまでの間に何らかの原因でエラーが発生し、generationをスキップするケースにおいて、無駄に待ってしまう可能性があるので、連続性のチェックではなく遡ったTxを送っていないかのみの検証をするパターンもありうる。この場合のメリットとしてはオンチェーンでrevertしてエラー検出する前にStateRuntimeノードでTx送信前にエラーを発生させることができうること。
#434 で実装されたオンチェーン上での `groupKeyCounter` での検証ロジックに対して、順番が変わってしまった場合にrevertするかチェックするテストを実装する。 順番を変えるテスト実装は以下が考えられる。 * stateruntimeノードからのTx送信を受け取るモックサーバーを実装 * stateRuntimeノードはモックサーバーに向けてTxを2つ送信 * モックサーバーはそのTxの順番を入れ替えた上で、オンチェーンに送信 * オンチェーンの検証ロジックにより失敗するかチェック
https://github.com/LayerXcom/anonify/blob/2455762217ec2e6baf94f3c51b830f2ed741aacd/contracts/Anonify.sol#L86
万が一、イベント取得時にエラー発生すると(デコード失敗など)インクリメント検証がスタックしてしまい、永遠に失敗してしまう。 オンチェーンに記録されたイベントに対してこのようなエラーが発生することあるか確認。 https://github.com/LayerXcom/anonify/blob/1cb6761e4713ff5b7f3d7e24a202a5a65c468a4f/modules/anonify-enclave/src/commands.rs#L97-L98 https://github.com/LayerXcom/anonify/blob/1cb6761e4713ff5b7f3d7e24a202a5a65c468a4f/modules/anonify-enclave/src/handshake.rs#L136-L137
現状、BTreeMapのキーがnot Stringの場合 `Serde_json::to_value()`できないため状態が`Approved`型の場合は通知スキップしている。 通知部分は状態遷移ルールでValueのみを抽出し、`NotifyState`として含める https://github.com/LayerXcom/anonify/blob/00a7e6213dd5b435c445269f2ffe0ee7c17cdee5/frame/runtime/src/impls.rs#L188-L193
`set_notification`における認証情報に紐づいて、通知エンドポイントをEnclave内に設定可能にし、その認証情報にひもづく状態が更新された場合は、enclaveから更新状態データを暗号化してリクエスト送信する
固定時間後リトライの部分をより効率的なアルゴリズムに改善 実装:https://github.com/LayerXcom/anonify/blob/master/frame/retrier/src/strategy.rs 参考 * graphprotocol/graph-node#424 * https://github.com/diem/diem/tree/master/common/retrier exponential backoff系ライブラリ * https://github.com/srijs/rust-tokio-retry * https://github.com/ihrwein/backoff
クライアントが指定する状態遷移名含め暗号化する平文が可変長だと推測可能な余地があるので固定長にする https://github.com/LayerXcom/anonify/blob/e396c7f24e1ad81005f2f2358b7f04b30136fbb6/example/erc20/api/src/lib.rs#L25-L26
バイナリエンコードして型変換している部分の修正 https://github.com/LayerXcom/anonify/blob/5c525788a52836169f6d99585011fec0b3e02f56/frame/common/src/traits.rs#L30-L33
現状、`serialize_seq`でそれぞれのバイト列をserializeしているが、それぞれのバイト列をバイトごとに `serialize_tuple` でserializeすることで、`bincode::serialize`時のバイト列をよりコンパクトにする https://github.com/LayerXcom/anonify/blob/4661e0516251ca26e60fe9fd6fc10c2cd60011b2/modules/anonify-ecall-types/src/types.rs#L217-L271 https://github.com/LayerXcom/anonify/blob/4661e0516251ca26e60fe9fd6fc10c2cd60011b2/modules/anonify-ecall-types/src/types.rs#L524-L588