前回、イーサリアム上での直前のコントラクト呼び出しは、パラメータを間違えてそのままrevertして失敗しました。その結果、ガス代は一銭も減らず、学費を無駄に払っただけになりました。今週はDuskの料金メカニズムのドキュメントを読んでみたところ、このロジックはDuskでもまったく同じだと分かり、ついでに細部も整理しました。
Dusk側では費用単位はLUXで、費用計算のロジックは「gas_used × gas_price」です。ユーザーはトランザクション送信時に、ガス上限と、支払う意志のある単価を設定しますが、実際に消費されるガスが設定した上限を超えると、トランザクションは直接revertして失敗します——ただし、すでに消費された分のガス代は支払いが必要で、最終的に失敗したからといって返金されることはありません。これはイーサリアムの仕組みにほぼ同じで、ここは一連の動きとして一致しています。
回収された手数料はブロック報酬に合算され、これまで話してきた配分比率に従って、ブロック生成者、投票委員会、そして開発基金に分配されます。
最初は「失敗してもお金を取る」という設計が少し直感に反していると感じましたが、考え直すとこれは必要な防護策です。失敗した取引は無料で済むなら、悪意のあるユーザーが成功するはずのない取引を際限なく大量に投げても、コストを払わずに済んでしまいます。それによってネットワークを詰まらせ、ノードの計算リソースを無駄に消費する——実質的にはDoS攻撃のようなものです。「すでに消費した計算量」に相当する費用を回収することで、ノードがすでに実際に費やした計算リソースに対して本質的に支払いを行っているわけで、たとえその取引が最終的に成功しなくても、ノードは確かに計算してリソースを使ったのだから、このコストは誰かが負担すべきです。
この仕組みはユーザーにとって、「トランザクションを書く」「コントラクトのパラメータを調整する」ときに、もう一段慎重になる必要があることを意味します。特にバッチ操作や複雑なコントラクト呼び出しを行う場合、パラメータ設定を間違えると、単にトランザクションが失敗するだけでは済まず、実際に現金同等の“学費”をきちんと支払うことになります。これは多くの人が抱く「オンチェーン操作が失敗しても、結局はやり直せる」という直感とは少し違います。失敗の代償は、決してゼロではありません。
今回はDuskで本当に転びはしませんでしたが、イーサリアムでのあの教訓のおかげで先に目が覚めただけです。まず仕組みを理解してから動けば、事後に学費を払うよりずっと得です。
#dusk $DUSK @Dusk
Dusk側では費用単位はLUXで、費用計算のロジックは「gas_used × gas_price」です。ユーザーはトランザクション送信時に、ガス上限と、支払う意志のある単価を設定しますが、実際に消費されるガスが設定した上限を超えると、トランザクションは直接revertして失敗します——ただし、すでに消費された分のガス代は支払いが必要で、最終的に失敗したからといって返金されることはありません。これはイーサリアムの仕組みにほぼ同じで、ここは一連の動きとして一致しています。
回収された手数料はブロック報酬に合算され、これまで話してきた配分比率に従って、ブロック生成者、投票委員会、そして開発基金に分配されます。
最初は「失敗してもお金を取る」という設計が少し直感に反していると感じましたが、考え直すとこれは必要な防護策です。失敗した取引は無料で済むなら、悪意のあるユーザーが成功するはずのない取引を際限なく大量に投げても、コストを払わずに済んでしまいます。それによってネットワークを詰まらせ、ノードの計算リソースを無駄に消費する——実質的にはDoS攻撃のようなものです。「すでに消費した計算量」に相当する費用を回収することで、ノードがすでに実際に費やした計算リソースに対して本質的に支払いを行っているわけで、たとえその取引が最終的に成功しなくても、ノードは確かに計算してリソースを使ったのだから、このコストは誰かが負担すべきです。
この仕組みはユーザーにとって、「トランザクションを書く」「コントラクトのパラメータを調整する」ときに、もう一段慎重になる必要があることを意味します。特にバッチ操作や複雑なコントラクト呼び出しを行う場合、パラメータ設定を間違えると、単にトランザクションが失敗するだけでは済まず、実際に現金同等の“学費”をきちんと支払うことになります。これは多くの人が抱く「オンチェーン操作が失敗しても、結局はやり直せる」という直感とは少し違います。失敗の代償は、決してゼロではありません。
今回はDuskで本当に転びはしませんでしたが、イーサリアムでのあの教訓のおかげで先に目が覚めただけです。まず仕組みを理解してから動けば、事後に学費を払うよりずっと得です。
#dusk $DUSK @Dusk
