Base mainnet settlement, adversarial hardening, and v1.0.0 - #2
Merged
Conversation
…aining adversarial scenarios
…n the README config to the schema
Revinand
approved these changes
Aug 23, 2026
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.
eip155:8453through a remote facilitator, verified on chain. Base Sepolia too. The gateway
holds no key, signs nothing and pays no gas on either.
cdp— a fresh JWT per request, via adynamically-imported optional peer nobody else installs.
noneandbearercover everything else and install nothing.
allowUnauthenticatedFacilitator— a mainnet facilitator that takes nocredential is allowed, but only by name, and
doctorreports WARN for aslong as it is.
{param}in the host position ofbackend.urllet caller input choose which host the gateway calls; everypath-position defence was inert there. Refused at config load.
Errorfor a 401/5xx, so an outage was being recorded as a bad payment. Anythrow now means "no verdict obtained".
${A:-${B}}silently corrupted
adminToken; shell near-misses loaded as literalcredentials; a resolved secret could be quoted back in an error. One rule
closes all three.
additionalProperties— the stamper'sthird drift from the validator.
mountPathvalidated at load,amount matched with
!==to agree with the pinned SDK, facilitator rejectionstrings clamped before they reach a buyer or the ledger.
test:mainnet, adversarial concurrency/restart/facilitatorcases, CDP auth, ledger permissions. Neither public-network suite runs in CI —
a workflow there means a funded key in repository secrets.
agent-commerce/v1.0.0while it was stillfree to move.