Background
The async TEE attestation path (#3714) forwards config.verifier_tera_gas to the cross-contract verify_quote call. Real dcap_qvl::verify on a valid quote burns ~173 Tgas, above DEFAULT_VERIFIER_TERA_GAS = 100, so with the default the cross-call OOGs (Exceeded the prepaid gas), the yield times out, and attestation never completes (hit in a real-TDX e2e — see #3714).
The #3715 tests don't catch it: the gas-metered sandbox tests (tee_verifier.rs) only cover not-configured / Rejected (a 16-byte quote that dies at parse) / unreachable — all negligible gas; the Verified verdict is covered in-process (testing_env!, which does not meter gas); and contract_configuration.rs only round-trips verifier_tera_gas without executing verify_quote. So no test runs a valid quote through verify_quote under a realistic budget.
User Story
As an MPC contract maintainer, I need a test that exercises verify_quote with a valid quote at the production gas budget, so that an insufficient verifier_tera_gas (like the 100 default) is caught in CI instead of only in a live TDX deployment.
Acceptance Criteria
Resources & Additional Notes
Background
The async TEE attestation path (#3714) forwards
config.verifier_tera_gasto the cross-contractverify_quotecall. Realdcap_qvl::verifyon a valid quote burns ~173 Tgas, aboveDEFAULT_VERIFIER_TERA_GAS = 100, so with the default the cross-call OOGs (Exceeded the prepaid gas), the yield times out, and attestation never completes (hit in a real-TDX e2e — see #3714).The #3715 tests don't catch it: the gas-metered sandbox tests (
tee_verifier.rs) only cover not-configured / Rejected (a 16-byte quote that dies at parse) / unreachable — all negligible gas; theVerifiedverdict is covered in-process (testing_env!, which does not meter gas); andcontract_configuration.rsonly round-tripsverifier_tera_gaswithout executingverify_quote. So no test runs a valid quote throughverify_quoteunder a realistic budget.User Story
As an MPC contract maintainer, I need a test that exercises
verify_quotewith a valid quote at the production gas budget, so that an insufficientverifier_tera_gas(like the 100 default) is caught in CI instead of only in a live TDX deployment.Acceptance Criteria
tee-verifier, votes it in, and submits a valid Dstack attestation viasubmit_participant_info— using thetest_utils::attestation::quote()/collateral()fixtures with the sandbox block clock fast-forwarded into the fixture's validity window (cf.crates/tee-verifier/tests/verify_quote.rs::verify_quote__should_return_verified_td10_report_for_valid_fixture) — at the productionverifier_tera_gas, asserting the submission resolves to a stored attestation (get_attestation→Dstack).verifier_tera_gasasserting the submission fails/rolls back cleanly, pinning the required budget with a test.Resources & Additional Notes
dcap-qvl#3714 (async core), test(contract): sandbox coverage + stub verifier for async attestation #3715 (tests)verify_quote≈173 Tgas vs the 100 default;verifier_tera_gas=200fits under the 300 Tgas tx cap (verify + resolve[60] + callback[10]).