Repository navigation
Conversation
`--batch-operator-explicit-payer` and `--batch-underwriter-explicit-payer`, off by default, make the relay or the underwriter declare `{account, sysio.payer}` ahead of its permission on every action it pushes, so the account pays from its own CPU and NET instead of the action's contract. The role's one signature satisfies both authorizations.
An account without CPU or NET would fail every push it pays for, so the node stops at startup in that case, like the other signer checks. There is one option per role because the relay and the underwriter may run as different accounts.
Change-Id: I4fb3bf7bda43c2dcc68450b1f32ab10ea212a6af
huangminghuang
approved these changes
Nov 6, 2026
huangminghuang
left a comment
Contributor
There was a problem hiding this comment.
Reviewed all six changed files and traced authorization, startup resource checks, and CPU/NET billing. No actionable findings.
Validation: all 8 role-configuration tests passed (42 assertions). The payer integration test compiled, but could not be linked against the available local testing library because it lacks sysio::testing::default_kv_engine(). Full plugin compilation was also blocked by missing generated protobuf headers, so integration execution and the full build remain unverified.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Under contract-pays, every action the batch operator plugin pushes bills its
sysio.*contract. #750 makes subjective billing charge the first authorizer of such actions against a 300 ms / 24 h budget, and devnet batch operators each use about 450 to 780 ms a day ofsysio.msgchCPU. An action with an explicit payer bills that payer instead, so these options let an operator pay from its own resources and stay clear of the budget.--batch-operator-explicit-payer(the relay) and--batch-underwriter-explicit-payer(the underwriter) are off by default. On, each action declares[{account, sysio.payer}, {account, permission}], and the signature the role already makes for its permission satisfies both. There is one option per role because the two roles may run as different accounts, each needing its own resources.Before turning an option on, give the account CPU and NET of its own (an ROA policy). Otherwise its transactions fail on its own limits; the node checks this at startup and stops. Size the policy for a day of pushes: the account pays for each action's whole execution, inline actions included (a
chkconsthat advances the epoch runssysio.epoch::advance), and other nodes bill its failed pushes against the same limits.explicit_payer_testspushessysio::reqauthon a tester chain whose operator starts with no CPU or NET:Other pushers:
producer_plugin's snapshot provider pushessysio::votesnaphashas<snapshot-provider-account>@active, once per attestation interval, so the new budget would charge it too, at a far lower rate. The outpost client plugins sign only Ethereum and Solana transactions. Neither is changed here.