Skip to content

Ss - #309

Open
canicefavour wants to merge 126 commits into
StellarState:mainfrom
canicefavour:ss
Open

Ss#309
canicefavour wants to merge 126 commits into
StellarState:mainfrom
canicefavour:ss

Conversation

@canicefavour

Copy link
Copy Markdown

Expanded the invoice-escrow integration test suite to improve contract reliability by covering critical edge cases, failure scenarios, and state persistence validation. The new tests strengthen regression protection by exercising boundary conditions, validating contract error handling, and verifying that contract state remains consistent across both successful and failed transactions.

The integration suite was enhanced with dedicated test cases for invalid inputs, authorization failures, and unsupported state transitions, ensuring the contract returns the expected error codes instead of failing unexpectedly. Error assertions were added to verify that each failure path produces the correct contract-defined error, improving confidence in the contract's public interface and error semantics.

Additional persistence checks validate that contract storage is updated correctly after successful operations and remains unchanged when transactions fail or revert. These tests help guarantee state integrity and prevent unintended mutations during exceptional execution paths.

Overall, the expanded integration coverage provides stronger safeguards against regressions while validating the correctness, reliability, and consistency of the invoice escrow contract under both normal and adverse operating conditions.

Highlights
Expanded integration test coverage for edge cases and failure scenarios.
Added tests for invalid inputs, boundary conditions, and unauthorized operations.
Verified contract-specific error codes for expected failure paths.
Added assertions for invalid state transitions and contract validation rules.
Confirmed contract storage persists correctly after successful operations.
Verified failed transactions do not mutate on-chain contract state.
Improved regression protection through comprehensive state integrity checks.
Increased confidence in contract reliability, error handling, and long-term maintainability.

Closes #164

JONAH-6 and others added 30 commits July 25, 2026 01:31
Adds matrix build strategy to test across stable and MSRV (1.80.0)
toolchains. Targets wasm32-unknown-unknown on all matrix entries
to ensure compiler compatibility across versions.

Refs StellarState#69
Integrates ShellCheck action to lint all shell scripts in the
scripts/ directory. Catches syntax errors, unquoted variables,
and other common shell scripting issues.

Refs StellarState#70
- Run cargo fmt to fix formatting issues in invoice-escrow and
  payment-distributor contracts
- Update PR check workflow to use github-script for reliable
  issue reference detection

Refs StellarState#69, StellarState#70, StellarState#71, StellarState#72
- Split matrix into separate jobs for better compatibility
- Remove unnecessary checkout step from PR check
- Ensure workflows are valid YAML

Refs StellarState#69, StellarState#70, StellarState#71, StellarState#72
Remove --all-targets and --all-features flags from clippy to avoid
compiling test targets that pull in incompatible dependencies.
Use --all flag instead to lint all workspace crates.

Refs StellarState#69, StellarState#70, StellarState#71, StellarState#72
- Simplify workflow structure by removing redundant env/permissions
- Restore matrix strategy for stable and MSRV 1.80.0 toolchains
- Keep ShellCheck job for shell script validation

Refs StellarState#69, StellarState#70, StellarState#71, StellarState#72
The pre-existing dependency issues (soroban-env-host + ed25519-dalek)
are in the upstream repo and not caused by our changes. The CI
configuration is correct - formatting, ShellCheck, and PR validation
all pass. Clippy/test failures are pre-existing.

Refs StellarState#69, StellarState#70, StellarState#71, StellarState#72
…ownership history (StellarState#106, StellarState#108, StellarState#111, StellarState#113)

Issue StellarState#106: Implement Nonces Query Method for Permit-style Transfers
- Add get_nonce function returning per-address nonce (starts at 0)
- Add Nonce storage key and get_nonce/increment_nonce helpers
- Emit nonce_queried event on each call
- Add unit tests for nonce initialization, unknown accounts, and event emission

Issue StellarState#108: Add Granular Token Admin Role Delegations
- Introduce RoleAdmin storage with role -> admin mapping and role -> account grants
- Initialize default roles (admin, minter, pauser, tlock) on contract init
- Add get_role_admin, set_role_admin, grant_role, revoke_role, has_role functions
- Emit role_admin_updated and role_granted events
- Add unit tests for role initialization, grant/revoke, unauthorized access, and events

Issue StellarState#111: Implement Token Ownership History Tracking Storage
- Add OwnershipHistoryRecord type (from, to, amount, ledger)
- Add History persistent storage key with append/get helpers
- Record ownership history on every transfer and transfer_from
- Add get_token_history view function for any address
- Emit history_appended events on transfers
- Add unit tests for empty history, post-transfer records, multiple transfers, ledger tracking, and events

Issue StellarState#113: Enforce Explicit Fee Deduction on Token Transfer Hook
- Add FeeBps instance storage with get/set helpers
- Add set_fee_bps admin function with validation (0..=10_000 range)
- Deduct fee from sender on transfer and transfer_from when fee > 0
- Send deducted fee to admin address
- Emit fee_updated and fee_deducted events
- Add InsufficientBalanceForFee error for when sender has enough for amount but not fee
- Add unit tests for fee config, deduction, insufficient balance, events, and zero-fee passthrough

All 72 tests pass. cargo clippy clean with no warnings.
- errors.rs: fix duplicate enum discriminant (Paused/InvalidPayer both 15)
- lib.rs: fix ambiguous Option<Address> into_val() calls with explicit
  turbofish; add missing ensure_not_paused() guard to create_escrow();
  forward 2x amount (not amount) to the payment distributor so it can
  cover seller + investor + platform fee, matching the direct-settlement
  path's payout total
- invoice-escrow/test.rs, integration_test.rs: fix borrow mismatches and
  unused import surfaced once the crate compiled again
- payment-distributor/test.rs, integration_test.rs: update create_escrow/
  fund_escrow call sites to match the current contract signatures
  (debtor, commitment, funded amount)
- invoice-token/lib.rs, invoice-escrow/lib.rs: add missing #![no_std] so
  wasm32 builds don't link std against soroban-sdk's own panic handler
- invoice-token/Cargo.toml, invoice-escrow/Cargo.toml: move the
  testutils feature to [dev-dependencies] so release/wasm builds don't
  pull in std-only deps (serde_json, rand)
- Cargo.toml: pin soroban-sdk to an exact version for reproducible builds

Verified locally: cargo fmt --check, cargo clippy (both CI invocations,
-D warnings), cargo test --all (118 passed), and cargo build --release
--target wasm32-unknown-unknown all pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…n-109-110-112-114

Implements invoice-token enhancements for approval lifecycle, indexed balance queries, pausable burns, and dynamic sub-asset precision.
…lementation

Feature/issue implementation
…en-enhancements-106-108-111-113

feat(invoice-token): nonce, role admin, fee deduction, and ownership history
78: extend persistent-storage TTL on every escrow access (get_escrow/
set_escrow), so long-lived invoices don't archive mid-lifecycle.

86: add escrow_status_changed lifecycle event, emitted on every state
transition (Created/Funded/Settled/Refunded/Cancelled) alongside the
existing per-action events.

89: add opt-in buyer whitelist enforcement on fund_escrow, gated by a
new Config.whitelist_enabled flag (defaults false so existing behavior
is unchanged unless an admin explicitly enables it).
…ecords

Add cleanup_escrow, callable by the seller or admin, to remove escrow
and per-funder records once an escrow reaches a terminal state
(Settled, Refunded, or Cancelled), reclaiming persistent storage that
is never mutated again.

Closes StellarState#94
… approvals

Add fund_escrow_signed so a relayer can submit a buyer's off-chain
signed funding approval on their behalf. The buyer authorizes an exact
(invoice_id, amount, nonce) tuple via require_auth_for_args, and the
contract tracks the highest nonce consumed per buyer so the same
signed approval cannot be replayed. Shared funding logic is factored
out of fund_escrow into fund_escrow_core, reused by both entry points.

Closes StellarState#93
…liance

Reject initialize() calls with an empty name or symbol: SEP-41 requires
token metadata to be meaningful, not empty placeholders.

Closes StellarState#95
Add extend_allowance so an approver can push out an existing
allowance's expiration ledger without changing its amount or needing
to know/replay the current allowance. Requires the allowance to still
be valid (not expired) and the new expiration to be strictly later
than the current one.

Closes StellarState#99
…tellarState#138)

- Add test_create_escrow_zero_face_value_only — face_value=0, purchase_price=500
- Add test_create_escrow_zero_purchase_price_only — face_value=1000, purchase_price=0
- Add test_create_escrow_negative_face_value_only — face_value=-100, purchase_price=500
- Add test_create_escrow_negative_purchase_price_only — face_value=1000, purchase_price=-100
- Add test_zero_amount_does_not_create_escrow — verify state not persisted on failure
- Add test_fund_escrow_zero_amount — zero funding rejected, status unchanged
- All tests assert proper Error::InvalidAmount code emission
joan-bisbal and others added 29 commits July 29, 2026 17:42
…llarState#206) (StellarState#226)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: document local smoke testing and testnet script execution (StellarState#206)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…ate#212) (StellarState#227)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: update root README architecture diagrams and badges (StellarState#212)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…tellarState#207) (StellarState#228)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: create security audit preparation and threat model document (StellarState#207)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…llarState#209) (StellarState#229)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: publish smart contract gas and CPU instruction benchmarks (StellarState#209)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…ypeScript (StellarState#204) (StellarState#230)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: publish client integration SDK example recipes in JavaScript/TypeScript (StellarState#204)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…StellarState#203) (StellarState#231)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: create architecture overview diagram for multi-contract system (StellarState#203)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…llarState#201) (StellarState#234)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: document payment distributor split math and fee schedules (StellarState#201)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…larState#200) (StellarState#235)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: create deployment & initialization step-by-step tutorial (StellarState#200)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…ellarState#199) (StellarState#236)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: add SEP-41 token standard compliance mapping specification (StellarState#199)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…rState#198) (StellarState#237)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: update per-contract README usage guides for developers (StellarState#198)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…State#197) (StellarState#238)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: document Soroban storage TTL extension best practices (StellarState#197)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…State#196) (StellarState#239)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: create end-to-end invoice financing lifecycle diagram (StellarState#196)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
StellarState#195) (StellarState#240)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* docs: publish comprehensive API reference document for invoice escrow (StellarState#195)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…tellarState#194) (StellarState#241)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* security: comprehensive pre-audit review of all workspace contracts (StellarState#194)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…ty (StellarState#193) (StellarState#242)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* security: audit dynamic event log emitting costs and topic cardinality (StellarState#193)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…patibility (StellarState#192) (StellarState#243)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* security: validate contract upgrade migration safety and storage compatibility (StellarState#192)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…hecks (StellarState#191) (StellarState#244)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* security: audit SEP-41 allowance authorization expiration boundary checks (StellarState#191)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
…rwrites (StellarState#190) (StellarState#245)

* docs: update README Security program and contract deployment address specifications (StellarState#217)

* security: verify immutable storage key protections against admin overwrites (StellarState#190)

---------

Co-authored-by: joan-bisbal <joan-bisbal@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
… cases (StellarState#296)

- Add 20 new edge case tests covering overflow scenarios, zero amount validation, empty/mismatched vectors, invalid escrow status values, state storage persistence, maximum value boundaries, multiple distributions, and uninitialized contract access
- All tests assert proper error code emissions on failure paths
- All tests verify state storage persistence after execution
- All payment-distributor tests pass (78/78)
- Code formatted with cargo fmt
- Code passes cargo clippy checks

Co-authored-by: Your Name <your.email@example.com>
Merges the substantial upstream dev history (toolchain migration to
Soroban SDK 27, a committed Cargo.lock, numerous docs/security PRs, and
two other test-adding PRs for payment-distributor) on top of this
branch's test coverage for issues StellarState#172, StellarState#171, StellarState#168, and StellarState#157.

Conflict resolution notes:
- payment-distributor/src/{lib,errors,events,storage,types}.rs: took
  upstream's versions, which already fix the same underlying bugs this
  branch fixed independently (the undefined `payment_amount` variable,
  the duplicate fn definitions, and the seller-receives-$0 distribution
  formula bug) via a different but equivalent approach, and drop the
  half-merged distribute_batch feature entirely rather than completing it.
- payment-distributor/src/test.rs and integration_test.rs: rebuilt on
  upstream's now-current (and further-expanded) test suites, layering
  this branch's StellarState#172/StellarState#171 tests on top and adapting the StellarState#171 event-topic
  tests to Soroban SDK 27's XDR-based `env.events().all()` API (SDK 22
  returned tuples directly; SDK 27 returns a `ContractEvents` wrapper
  requiring manual XDR parsing, mirrored from invoice-token's existing
  `parse_event` helper).
- invoice-escrow/src/test.rs: rebuilt on upstream's current test suite,
  layering this branch's StellarState#168/StellarState#157 tests on top, and fixed four
  pre-existing tests broken by an unrelated upstream security PR that
  added an admin-auth requirement to `initialize` (via a new
  `authorize_initialize` helper using targeted `MockAuth`/`MockAuthInvoke`
  instead of the blanket `mock_all_auths` these tests deliberately avoid).
- invoice-escrow/src/integration_test.rs and invoice-token/src/test.rs:
  took upstream's versions outright (no tests of this branch's own live
  there).
- Additionally fixed three instances of corrupted/interleaved test
  function bodies in upstream's payment-distributor/src/test.rs (mismatched
  function names and bodies, and one truncated function) and two
  `env.auths()`-based tests whose assertions didn't match how Soroban
  actually records self-authorizing cross-contract calls — all pre-existing
  breakage on upstream/dev, unrelated to this branch, but blocking
  `cargo test --workspace` regardless of the merge.
- Regenerated all test snapshot JSON files after resolving conflicts.

cargo test --workspace: 121 (invoice-escrow) + 69 (invoice-token) + 104
(payment-distributor) = 294 passing, 0 failing. cargo clippy --workspace
--tests: no errors.
…172-171-168-157-implementation

test: add coverage for fee BPS rejection, event topics, and refund guards
…n-authority-and-escrow-collision-154-152

test: add initial test coverage for issues StellarState#154, StellarState#153, StellarState#152, and StellarState#151
…rage (StellarState#298)

Add 16 new test functions covering:
- Whitelist management: admin enable/disable, buyer whitelist/unwhitelist,
  auth checks, and runtime enforcement (block non-whitelisted, allow
  whitelisted, allow any when disabled)
- Admin pause as dispute resolution: pause blocks funded escrow refund,
  unpause restores operation, pause toggle event emission, view functions
  unaffected while paused
- Admin cleanup override: admin can clean up settled, refunded, and
  cancelled terminal escrows

Closes #issue-implementation
fixes StellarState#174 [TESTING] Write Comprehensive Test Matrix for All Error Va…
@drips-wave

drips-wave Bot commented Jul 30, 2026

Copy link
Copy Markdown

@canicefavour Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.