Changelog
All notable changes to this project are documented here. Format follows Keep a Changelog.
[Unreleased]
[0.2.0] - 2026-07-10
Added
- Validation for
initialize:bond_amountmust be positive (InvalidBondAmount) andchallenge_window_secsmust be non-zero (InvalidChallengeWindow). shellcheckforscripts/*.shin CI.- Documentation reorganized into
docs/(formerlybook/), with GitHub-special files (README.md,CONTRIBUTING.md,SECURITY.md) staying at root and everything else (ARCHITECTURE.md,CHANGELOG.md,CONTRACT.md,DEPLOYMENT.md,GLOSSARY.md,INTEGRATION.md) living directly underdocs/src/.
Fixed
- Resolver committee is now snapshotted onto an assertion when it’s disputed
(
Assertion.resolvers), and voting/majority for that dispute are decided against the snapshot for its whole lifetime. Previouslyresolvere-read the live committee on every call, so anupdate_resolverscall mid-dispute could change who was entitled to decide it and what majority meant, partway through voting. - The internal
Self::getstorage helper no longer panics on missing storage; it returnsError::NotInitializedlike the rest of the contract’s error paths.
Changed
- Test suite refactored around a shared
Fixturehelper to cut the boilerplate repeated across nearly every test (env setup, token registration, contract registration, initialization).
[0.1.0] - 2026-07-09
Initial release: a working, tested, testnet-deployed assertion and dispute oracle.
Added
contracts/tholos: the core assertion and dispute contract, withinitialize,assert_outcome,dispute,finalize,resolve,update_resolvers, andset_paused.- Admin-controlled resolver committee updates (
update_resolvers), so a compromised or unresponsive resolver can be replaced without redeploying. - Admin-controlled pause (
set_paused) forassert_outcome,dispute, andresolve.finalizeandupdate_resolversdeliberately stay callable while paused. contracts/demo-consumer: a minimal example contract calling into Tholos, validating the cross-contract integration pattern documented in INTEGRATION.md against Tholos’s real compiled wasm.scripts/testnet-smoke.sh: an end-to-end check against real Stellar testnet infrastructure (deploy, initialize, assert, dispute, resolve).- CI (
fmt,clippy,test, wasm build) on every push and pull request. - Documentation:
README.md,CONTRACT.md,INTEGRATION.md,CONTRIBUTING.md, published as a site via mdBook and GitHub Pages.
Fixed
- Reentrancy:
assert_outcome,dispute,finalize, andresolvenow write their state change before calling the external token contract’stransfer, closing a hole where a non-standard or malicious token could re-enter mid-call and drain bonds belonging to unrelated assertions. Covered by a regression test (test_finalize_is_not_reentrant) using a token that actively attempts the reentrant call.