Repository navigation
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
GenVM PR actionsTick a box to run it (the box unticks itself when handled). Actions only run while the PR has the
Commands
|
Linked executor PR(s)executor: genlayerlabs/genvm-executor#53 (v0.2) |
The node raised each sender-pool child of an open-bucket transaction to the chain floor and passed down half of the spare pool after execution. The host now sends both chain values as message_fee_cascade and the executor applies the same arithmetic before the execution hash, so the budgets are part of what validators compare.
v0.2 only serves Studio backward compatibility, and Studio never sends message_fee_cascade.
ca47404 to
5788b2b
Compare
|
/genvm-run-tests |
|
👀 Full tests are running for |
|
/genvm-run-tests |
|
👀 Full tests are running for |
|
/genvm-run-tests |
|
👀 Full tests are running for |
What
GenVM applies the open-bucket cascade carve that the node used to apply after execution: each sender-pool internal message of an open-bucket transaction is raised to the chain floor, then the children share half of the spare pool equally
Delivery Context
Hub: https://github.com/genlayerlabs/genlayer-node/pull/2218
Base:
v0.6-dev, which includes the descendant grants of #59Changes
message_fee_cascade {min_primary_fee, budget_total}on the run request,nullby default, cleared for nested runspr/v0.3/feat/open-bucket-carve):rt::cascade::applyrewrites the final emissions before the execution hash. v0.2 is untouched: it serves Studio backward compatibility onlyfee = max(fee, min_primary_fee)for every sender-pool internal and deploy message (use_balanceones are skipped)spare = budget_total - Σ fee; if positive, each getsspare / (2 * N)moredata_fees_remainingis unchanged04-fees.rst) andmanager-api.yamldocument the inputmessage_fee_cascadefrom a case; new casemessage/open_bucket_cascadeEquivalence With the Node
Same arithmetic as the node's removed
clampInternalMessageFeescarve, including the funded total (messageFeesBudgetTotal, not the remaining pool), integer division order and the set of counted messages. A single floor suffices because the node gives every synthesized open-bucket internal node the same params; the node PR has a test for that invariantValidation
rt::cascadeunit tests: 5/5open_bucket_cascade: leader, validator and sync all agree; 2 sender-pool messages floored to 100000 then +200000 each, theuse_balanceone keeps its metered feeuse_balance_no_alloc,send_message_onon both lines: 33/33ninja all/bin cargo/clippy cargo/fmt: cleanRisks
Summary by CodeRabbit