問題
EOS のスマートコントラクトを運用する時必要になるリソースは、RAM / CPU / NET
があります。
RAM
のほうは、データベースのように、自分のサービス状況に従って、データの変動傾向を予測して追加購入すれば良いのですが、 CPU
と NET
は、そもそも自分だけではなく、EOS
ネットワーク全体の状況に従って変動するので、予測が難しい状況です。
CPU / NET の購入方法
厳密的には、購入
ではなく、ステーキング(staking)
か、他のアカウントに代理してステーキング
してもらうか、になります
- 保証金みたいに、使いたい
CPU / NET
の分に対してEOS
をシステムスマートコントラクトに預かっておく感じになります - もっと多く使いたい時、もっと多く預かって置けば良いですし、それほど必要がない場合は、アンステーキングすれば良いです
- ただ、ステーキングする場合は、即時アカウントに反映されますが、アンステーキングの場合は、3日間の遅延期間があります。3日間立ってからその分の
EOS
がアカウントに戻されます
計算方法
RAM
の購入は、その時のレートに従って、支払った分の EOS
で換算されて、結果的にそのアカウントが使える RAM
がいくらバイト増えたという感じになりますが、CPU / NET
のほうは、絶対値ではなく、相対の値になります。
- まず、アカウントの過去 72 時間分の利用量を合計しておく
- 次に、
アカウントのステーキングしている EOS 量 / EOS ネットワーク全体がステーキングしている EOS 量
で、そのアカウントが使えるシステムリソースの割合を計算する - 次に、
その割合 x システム全体のリソース量
で実際使える利用量を計算する
計算できた値は、トランザクションが実行される都度、そのトランザクションで使った量を加算して、実際使える利用量を超えたかどうかを判定しています。
上記の計算方法でお分かりと思いますが、結局使えるリソースは、自分がステーキングした EOS
だけではなく、システム全体のステーキングしている EOS
の量と関係しているので、他の人がどんどんステーキングしてくると、自分が使えるリソースがどんどん減って行ってしまいます。
よって、実際サービスを提供する時は、CPU / NET
の利用状況を監視・対応しないと行けない状況です。
対応方法
対応方法として、監視+自動対応と、事前に多く用意しておくと、2つのやり方があります。
監視+自動対応
このほうのサービスは、まだ少ない印象です。
日本では、アットコイン株式会社 が最近リリースされた https://irex.io/ サービスがあります。
自動対応のほうは、まだ開発中のようです。
事前に多く用意しておく
余裕があれば、勿論多く用意しておけば良いのですが、みんな全員行けるわけではないので、少額の料金で別の人に代理してステーキングしてもらうサービスがいくつあります。
-
Chintai - EOS Token Leasing Platform | EOS Dapp Bandwidth Resources
-
REX
- EOS システムのリソースレンタルマーケット機能
-
v1.6.0
で提供する予定
-
番外:EOS Charge
- アカウントを指定して、そのアカウントのリソースで、有名なコントラクトでどの程度の操作回数ができるかを計算してくれるサービス
まとめ
EOS
は、エンドーユーザが無料でトランザクションを送信できるようにするため、イーサリアムの GAS
のような仕組みがありません。その代わりに、ネットワーク全体に対する攻撃を防ぐために、CPU / NET / RAM
というリソースで制限するようにしています。