Parent: #665
Depends on the core harness (#666).
Scope
Run the composed-contract specs in test/integration/specs against the live
harness, via a new integration-live vitest project that reuses the same
globalSetup, wallet pool, backend, and orchestrator as unit-live.
Unlike the per-category unit children, the composed contract cannot deploy
live: the base ConfidentialFungibleToken already bundles four k=16 circuits'
IR into one deploy tx and overruns the per-tx block byte budget, and this
composition is strictly larger. The deliverable is therefore the capability plus
a block-limit canary that asserts the rejection, rather than green functional
coverage. The canary flips red the day a smaller composition or a staged deploy
lets the contract through, which is precisely when functional live coverage
becomes possible.
The functional flows are also blocked independently: they mutate private state
mid-test via switchIdentity / cachePlaintext, which the live backend throws
on (private-state mutation unsupported on live backend). Going green needs both
a deploy that fits and a deploy-seeded, memo-decrypt rewrite.
Related: #716 tracks the follow-ups left out of the implementing PR.
Also noted while implementing: the dry integration project is currently red on
main, because test/integration/fixtures/* are written against an older
@openzeppelin/compact-simulator API — the installed 0.2.0 constructor takes
(deps), so new ComposedTokensSimulator(args, {}) hits deps.backend.kind on
undefined. That is adjacent to #712 but not listed there.
Parent: #665
Depends on the core harness (#666).
Scope
Run the composed-contract specs in
test/integration/specsagainst the liveharness, via a new
integration-livevitest project that reuses the sameglobalSetup, wallet pool, backend, and orchestrator as
unit-live.Unlike the per-category unit children, the composed contract cannot deploy
live: the base
ConfidentialFungibleTokenalready bundles four k=16 circuits'IR into one deploy tx and overruns the per-tx block byte budget, and this
composition is strictly larger. The deliverable is therefore the capability plus
a block-limit canary that asserts the rejection, rather than green functional
coverage. The canary flips red the day a smaller composition or a staged deploy
lets the contract through, which is precisely when functional live coverage
becomes possible.
The functional flows are also blocked independently: they mutate private state
mid-test via
switchIdentity/cachePlaintext, which the live backend throwson (
private-state mutation unsupported on live backend). Going green needs botha deploy that fits and a deploy-seeded, memo-decrypt rewrite.
integration-livevitest project, reusingunit-live's globalSetup and setuptest:live integrationorchestrator target, emitted by--listso CI canspawn a job for it
compile:integrationtakesSKIP_ZKfrom theenvironment so one script serves the dry and live paths
stack:
1010: Invalid Transaction: Transaction would exhaust the block limitscomposed mock or a staged-deploy / CMA path, each its own design track
integration-live— only needed once multiplegreen live specs exist; single worker is sufficient for one rejected deploy
integration-livematrix job, which needs the liveworkflow in ci: add live test suite workflow #681 to merge first
Related: #716 tracks the follow-ups left out of the implementing PR.
Also noted while implementing: the dry
integrationproject is currently red onmain, becausetest/integration/fixtures/*are written against an older@openzeppelin/compact-simulatorAPI — the installed 0.2.0 constructor takes(deps), sonew ComposedTokensSimulator(args, {})hitsdeps.backend.kindonundefined. That is adjacent to #712 but not listed there.