LoginSignup
0
0

More than 5 years have passed since last update.

EOS ノードの実行モードとDBのステートデータについて

Last updated at Posted at 2018-12-23

問題

EOS のステートデータ、つまり、マルチインデックステーブルのデータは、いつ更新されるのかは気になってきたので、少し調べてみました。
下記の記事を参考して整理しました。

EOS ソース解析 read only モードとは(原创| EOS 源码解析 什么是 read only 模式)
EOS DApp ハッキング解析トランザクション拒否によるなりすまし攻撃(原创| EOS DApp 攻击解析之利用交易未上链进行欺骗攻击)

結論

上記2つの記事を参考して、結論を先に出しますと

  • dapp から API ノードにアクション(トランザクション)を送信すると、APIノードがトランザクションを実行して、API ノードのステートデータを更新して、pending として記録しておく
  • API ノードが BP ノードからそのトランザクションを含めるブロックを受信すると、一旦 pending のトランザクションをロールバック(ステートデータもロールバックされる)してから、トランザクションを再度実行して、ステートデータを更新する

図に整理してみました。

Screen Shot 2018-12-23 at 11.58.19.png

ノードの実行モード

  • 特に設定してない場合は、SPECULATIVE モードに設定される
    • このモードの場合は、上記の動きで処理される
  • 記事1で紹介されたREAD_ONLY モードでは
    • dapp 側から push transaction を受信しても処理せず無視する
    • そのため、ステートデータの更新は、BPからのブロックブロードキャストを受けた時だけステートデータを更新する

まとめ

EOS のステートデータはブロックチェーンに乗ってないので、更新タイミングがよく分かりませんでした。
既にお分かりかもしれませんが、上記のフローの中では、ステートデータの更新タイミングがズレているところがあるので、それによって dapp が被害されてしまうことは、既に出てしまいました。
別の記事で詳細をまとめる予定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0