Background
All existing test coverage runs against soroban_sdk::testutils::Env — a mocked, in-process host environment. That's the right tool for fast unit/logic testing (and this repo has a lot of good coverage there now), but it doesn't exercise real network semantics: actual transaction submission, real stellar contract invoke argument encoding, real TTL/rent behavior over ledger time, real Stellar Asset Contract token behavior, or the actual deploy.sh script (#23) that's meant to be how these contracts get deployed in practice.
Right now nobody has verified that a freshly-deploy.sh'd pair of contracts on testnet can actually complete a full campaign lifecycle end-to-end through the real CLI — only that the Rust logic is correct in a mock.
Expected behaviour
A script (e.g. scripts/testnet-smoke-test.sh, or a justfile/Makefile target) that, against a real testnet deployment:
- Runs
deploy.sh (or assumes contracts are already deployed and takes their IDs as input)
- Funds two or three testnet accounts via friendbot
- Drives a full campaign lifecycle purely through
stellar contract invoke calls: create_campaign → fund_campaign → apply_to_campaign → approve_creator → submit_proof → approve_submission → claim_payment
- Asserts on-chain balances moved as expected (via
stellar contract invoke -- get_campaign / a Horizon balance query)
This doesn't need to run on every CI push (testnet dependency, funded accounts, network flakiness), but should be runnable on demand — e.g. a manually-triggered GitHub Actions workflow, or just documented as a pre-release checklist item — so there's some point before a mainnet deployment where the actual deployed artifact gets exercised, not just the source.
Files
- New script under
scripts/ or similar
- Possibly a new, manually-triggered CI workflow
Acceptance criteria
Background
All existing test coverage runs against
soroban_sdk::testutils::Env— a mocked, in-process host environment. That's the right tool for fast unit/logic testing (and this repo has a lot of good coverage there now), but it doesn't exercise real network semantics: actual transaction submission, realstellar contract invokeargument encoding, real TTL/rent behavior over ledger time, real Stellar Asset Contract token behavior, or the actualdeploy.shscript (#23) that's meant to be how these contracts get deployed in practice.Right now nobody has verified that a freshly-
deploy.sh'd pair of contracts on testnet can actually complete a full campaign lifecycle end-to-end through the real CLI — only that the Rust logic is correct in a mock.Expected behaviour
A script (e.g.
scripts/testnet-smoke-test.sh, or ajustfile/Makefiletarget) that, against a real testnet deployment:deploy.sh(or assumes contracts are already deployed and takes their IDs as input)stellar contract invokecalls:create_campaign→fund_campaign→apply_to_campaign→approve_creator→submit_proof→approve_submission→claim_paymentstellar contract invoke -- get_campaign/ a Horizon balance query)This doesn't need to run on every CI push (testnet dependency, funded accounts, network flakiness), but should be runnable on demand — e.g. a manually-triggered GitHub Actions workflow, or just documented as a pre-release checklist item — so there's some point before a mainnet deployment where the actual deployed artifact gets exercised, not just the source.
Files
scripts/or similarAcceptance criteria
cargo testdocs/ARCHITECTURE.mdas part of the pre-deployment checklist