| type | Feature |
|---|---|
| title | Add a paginated list_contracts_by_status reader for operations dashboards |
| labels | type:feature, area:indexer-views, stack:soroban, stack:rust, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 |
| assignees |
The escrow contract exposes get_contract, contract_exists, and get_contract_summary, but there is no way to enumerate contracts by lifecycle state. Operators cannot cheaply answer "which escrows are currently Disputed or Funded" without probing every id up to get_next_contract_id. Add a status-filtered, paginated reader backed by a maintained status index.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Add
list_contracts_by_status(env, status: ContractStatus, start: u32, limit: u32) -> Vec<u32>returning contract ids. - Maintain a
DataKeystatus index updated on every status transition increate_contract,deposit_funds,release_milestone,cancel_contract,raise_dispute, andfinalize_contract. - Bound
limitto a small constant and extend index TTL viattl::store_with_ttlon write.
- Fork the repo and create a branch
git checkout -b feature/contracts-list-contracts-by-status- Write code in:
contracts/escrow/src/lib.rs - Write comprehensive tests in:
contracts/escrow/src/test/participant_index_pagination.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
feat(escrow): add paginated list_contracts_by_status reader
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add an extend_contract_lifetime entrypoint for participant-funded storage TTL top-ups" labels: type:feature, area:storage-ttl, stack:soroban, stack:rust, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
ttl::extend_contract_and_milestones_ttl and ttl::extend_contract_ttl are only invoked as side effects of mutating calls, so a long-idle escrow can drift toward eviction with no way for participants to intervene. Expose a public entrypoint that lets any contract participant proactively refresh persistent storage TTL without changing escrow state.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Add
extend_contract_lifetime(env, contract_id: u32, caller: Address) -> boolcallingcaller.require_auth()and delegating tottl::extend_contract_and_milestones_ttl. - Restrict callers to the contract's client, freelancer, or arbiter; reject unknown contract ids via the same path as
contract_exists. - The call must be a pure TTL operation: no status transition, no accounting mutation.
- Fork the repo and create a branch
git checkout -b feature/contracts-extend-contract-lifetime- Write code in:
contracts/escrow/src/lib.rs - Write comprehensive tests in:
contracts/escrow/src/test/ttl_tests.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
feat(escrow): add extend_contract_lifetime ttl top-up entrypoint
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add a get_contract_participants reader returning client, freelancer, and arbiter together" labels: type:feature, area:read-api, stack:soroban, stack:rust, priority:low, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
Front-ends currently call get_contract and decode the full Contract struct just to render the three party addresses, which pulls in milestone accounting and status fields they do not need. A narrow participants reader keeps the ABI surface for role checks stable even as Contract gains fields.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Add a
ContractParticipantsstruct (client,freelancer,arbiter: Option<Address>) andget_contract_participants(env, contract_id: u32) -> ContractParticipants. - Reuse the not-found semantics already applied in
get_contractrather than panicking with a bare storage miss. - Extend TTL on read the same way other persistent readers do via
ttl::extend_contract_ttl.
- Fork the repo and create a branch
git checkout -b feature/contracts-get-contract-participants- Write code in:
contracts/escrow/src/lib.rs - Write comprehensive tests in:
contracts/escrow/src/test/summary.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
feat(escrow): add get_contract_participants read entrypoint
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add a get_approval_deadline reader exposing ledgers remaining before approval expiry" labels: type:feature, area:approvals, stack:soroban, stack:rust, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
approve_milestone_release writes approvals into temporary storage with a bounded TTL, and get_milestone_approvals returns only who approved. Callers cannot tell how long an approval will remain valid, so a MultiSig release can silently fail when one approval evicts before the second arrives.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Add
get_approval_deadline(env, contract_id: u32, milestone_index: u32) -> Option<u32>returning ledgers remaining, computed againstttl::compute_expiry. - Return
Nonewhen no live approval exists, distinguishing "never approved" from "approved and evicted". - Do not mutate TTL from this reader; keep it a pure view.
- Fork the repo and create a branch
git checkout -b feature/contracts-get-approval-deadline- Write code in:
contracts/escrow/src/lib.rs - Write comprehensive tests in:
contracts/escrow/src/test/approval_expiry.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
feat(escrow): add get_approval_deadline reader for approval ttl
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Reject role-overlapping addresses in propose_client_migration" labels: type:enhancement, area:migration, stack:soroban, stack:rust, priority:high, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
propose_client_migration stores a PendingClientMigration for an arbitrary new client address without checking it against the contract's other roles. Accepting a migration to the freelancer or arbiter address collapses two independent parties into one, defeating the release authorization and dispute models.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Validate in
propose_client_migrationthat the proposed client is not the current client, the freelancer, or the arbiter, and not the escrow contract's own address. - Emit a distinct
EscrowErrorvariant for the overlap case rather than a generic invalid-input error. - Re-check the same invariant in
accept_client_migration, since roles can change between proposal and acceptance.
- Fork the repo and create a branch
git checkout -b enhancement/contracts-migration-role-overlap- Write code in:
contracts/escrow/src/migration.rs - Write comprehensive tests in:
contracts/escrow/src/test/client_migration.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
fix(escrow): reject role-overlapping client in migration proposal
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Return concrete defaults from get_governed_parameters instead of None" labels: type:enhancement, area:governance, stack:soroban, stack:rust, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
get_governed_parameters returns Option<GovernedParameters> and yields None until set_governed_params has been called, while the enforcement paths still apply hardcoded fallbacks. Integrators therefore see None even though limits are actively enforced, which misrepresents on-chain behavior.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Change
get_governed_parametersto return aGovernedParameterspopulated from the same default constants the enforcement code uses when storage is empty. - Keep a separate boolean or timestamp reader so callers can still tell whether governance has explicitly written parameters.
- Ensure
set_protocol_fee_bpsandset_governed_paramswrites remain the single source of truth once present.
- Fork the repo and create a branch
git checkout -b enhancement/contracts-governed-params-defaults- Write code in:
contracts/escrow/src/governance.rs - Write comprehensive tests in:
contracts/escrow/src/test/governance.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
refactor(escrow): return default governed parameters when unset
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add validate_deposit_amount tests for exact, under, and over funding boundaries" labels: type:test, area:amount-validation, stack:soroban, stack:rust, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
amount_validation::validate_deposit_amount decides whether a deposit is acceptable against the contract total and current funded amount, but has no direct unit coverage at its decision boundaries. Its behavior at exactly-remaining, one-stroop-short, and one-stroop-over inputs is the difference between a stuck escrow and an overfunded one.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Add table-driven tests for
validate_deposit_amountcovering zero, negative, exactly-remaining, under, and over-total amounts. - Assert the exact
EscrowErrorvariant returned per case, not just that an error occurred. - Include a case where
funded_amountalready equals the contract total so any further deposit is rejected.
- Fork the repo and create a branch
git checkout -b test/contracts-validate-deposit-amount-bounds- Write code in:
contracts/escrow/src/amount_validation.rs - Write comprehensive tests in:
contracts/escrow/src/test/input_sanitization_amounts.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
test(escrow): cover validate_deposit_amount boundary cases
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add raise_dispute tests for non-participant callers and unfunded contracts" labels: type:test, area:disputes, stack:soroban, stack:rust, priority:high, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
raise_dispute moves an escrow into ContractStatus::Disputed, which blocks releases and refunds until an arbiter acts. Existing coverage focuses on resolution payouts, leaving the entry gate untested: who may raise a dispute, and from which statuses.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Assert that a random address that is neither client, freelancer, nor arbiter cannot call
raise_dispute. - Assert rejection when the contract is still unfunded and when it has already been finalized or cancelled.
- Assert that the contract status after a successful call is exactly
Disputedand thatget_contractreflects it.
- Fork the repo and create a branch
git checkout -b test/contracts-raise-dispute-gates- Write code in:
contracts/escrow/src/dispute.rs - Write comprehensive tests in:
contracts/escrow/src/test/dispute.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
test(escrow): cover raise_dispute caller and status gates
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add pause and emergency interaction tests for governance setters" labels: type:test, area:pause-controls, stack:soroban, stack:rust, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
pause, activate_emergency_pause, and resolve_emergency set flags read by the mutating lifecycle entrypoints, but the governance surface (set_protocol_fee_bps, set_governed_params, bind_settlement_token) has no tests describing whether it stays reachable while paused. The intended behavior needs to be pinned down before mainnet.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Add a matrix of tests across
{normal, paused, emergency}states asserting the outcome of each governance setter. - Assert that
is_pausedandis_emergencyreport independently and thatresolve_emergencydoes not implicitly unpause. - Document the intended matrix alongside the tests so it becomes the reference behavior.
- Fork the repo and create a branch
git checkout -b test/contracts-pause-governance-matrix- Write code in:
contracts/escrow/src/lib.rs - Write comprehensive tests in:
contracts/escrow/src/test/pause_controls.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
test(escrow): add pause and emergency matrix for governance setters
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add a per-withdrawal cap and cooldown to withdraw_protocol_fees" labels: type:security, area:protocol-fees, stack:soroban, stack:rust, priority:high, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
withdraw_protocol_fees lets the admin drain the entire balance reported by get_accumulated_protocol_fees in a single call. A compromised admin key converts directly into full treasury loss with no window for activate_emergency_pause to intervene.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Add a governed maximum withdrawal fraction plus a minimum ledger interval between successful withdrawals, stored under a dedicated
DataKey. - Reject calls that exceed the cap or land inside the cooldown with explicit
EscrowErrorvariants, and record the last withdrawal ledger. - Keep the accumulated-fee accounting exact: partial withdrawal must decrement by exactly the transferred amount.
- Fork the repo and create a branch
git checkout -b security/contracts-fee-withdrawal-rate-limit- Write code in:
contracts/escrow/src/lib.rs - Write comprehensive tests in:
contracts/escrow/src/test/protocol_fees.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
feat(escrow): rate limit protocol fee withdrawals
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Require a bound settlement token before create_contract accepts new escrows" labels: type:security, area:settlement-token, stack:soroban, stack:rust, priority:high, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
create_contract succeeds even when is_settlement_token_bound returns false, producing escrows that can never move real funds through deposit_funds or release_milestone. Worse, an admin can later bind_settlement_token to a different asset than participants assumed when they agreed to the milestone amounts.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Reject
create_contractwhen no settlement token is bound, using a dedicatedEscrowErrorvariant. - Persist the bound token address on the
Contractrecord at creation so later rebinding cannot retroactively change an existing escrow's asset. - Have
deposit_fundsandrelease_milestonesettle against the per-contract token rather than re-reading global state.
- Fork the repo and create a branch
git checkout -b security/contracts-require-settlement-token- Write code in:
contracts/escrow/src/create_contract.rs - Write comprehensive tests in:
contracts/escrow/src/test/sac_custody.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
fix(escrow): require bound settlement token at contract creation
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Gate submit_work_evidence to the freelancer and pre-release milestone states" labels: type:security, area:work-evidence, stack:soroban, stack:rust, priority:high, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
submit_work_evidence writes into Milestone.work_evidence and is read back by get_work_evidence, but the caller and milestone-state gates are not tight enough. Evidence written after a milestone has been released or refunded rewrites the audit trail for an already-settled payment.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Restrict the caller to the contract's freelancer with
require_auth, rejecting client, arbiter, and third parties. - Reject submissions when the milestone is already released or refunded, or when the contract is
Cancelled,Disputed, or finalized. - Reject empty evidence strings and keep the existing upper length bound enforced on the same path.
- Fork the repo and create a branch
git checkout -b security/contracts-work-evidence-gating- Write code in:
contracts/escrow/src/lib.rs - Write comprehensive tests in:
contracts/escrow/src/test/access_control.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
fix(escrow): restrict submit_work_evidence caller and milestone state
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Document the now_seconds ledger-time source and deterministic time control in tests" labels: type:docs, area:ledger-time, stack:soroban, stack:rust, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
utils::now_seconds is the single time source behind is_milestone_overdue, migration expiry, and the admin timelock, yet its semantics are only described in a stale commented-out example in utils.rs. Contributors do not know that ledger timestamps are validator-influenced and must never be used for fine-grained deadlines.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Write a docs page covering
now_seconds, its precision and trust assumptions, and every call site that depends on it. - Show how to advance time deterministically in tests via the Soroban test ledger info, with a worked example matching
test/timeout_tests.rs. - Remove or refresh the outdated commented
check_timeoutsketch inutils.rsso code and docs agree.
- Fork the repo and create a branch
git checkout -b docs/contracts-ledger-time-source- Write code in:
contracts/escrow/src/utils.rs - Write comprehensive tests in:
contracts/escrow/src/test/timeout_tests.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
docs(escrow): document now_seconds ledger time source
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add a WASM upgrade and redeploy runbook for the escrow contract" labels: type:docs, area:operations, stack:soroban, stack:rust, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
The repository documents deployment and mainnet readiness, but not the operational sequence for shipping a new WASM to an already-live escrow with in-flight contracts. Operators need a concrete order of operations spanning activate_emergency_pause, the upgrade itself, and post-upgrade verification via get_mainnet_readiness_info.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Write
docs/escrow/upgrade-runbook.mdcovering pre-upgrade checks, pause, WASM install and upgrade commands, unpause, and rollback. - Include a post-upgrade verification checklist asserting
get_admin,get_settlement_token,get_protocol_fee_bps, andget_next_contract_idare unchanged. - State explicitly which storage layout changes require a migration step versus a plain code swap.
- Fork the repo and create a branch
git checkout -b docs/contracts-upgrade-runbook- Write code in:
contracts/escrow/src/lib.rs - Write comprehensive tests in:
contracts/escrow/src/test/mainnet_readiness.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
docs(escrow): add wasm upgrade and redeploy runbook
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Give get_bounds a dedicated ContractBounds return type instead of reusing ContractSummary" labels: type:refactor, area:read-api, stack:soroban, stack:rust, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
get_bounds returns a ContractSummary, the same struct get_contract_summary uses to describe a single escrow. Overloading the indexer summary type to carry protocol-wide limits forces callers to ignore meaningless per-contract fields and couples the limits ABI to the summary schema version.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Introduce a
ContractBoundsstruct holding only the real limits (max milestones, max single amount, max escrow total, fee bps ceiling). - Change
get_boundsto returnContractBoundsand stop populating unrelatedContractSummaryfields with placeholders. - Keep
ContractSummaryreserved forget_contract_summaryso its schema version tracks one concern only.
- Fork the repo and create a branch
git checkout -b refactor/contracts-contract-bounds-type- Write code in:
contracts/escrow/src/types.rs - Write comprehensive tests in:
contracts/escrow/src/test/create_contract_bounds.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
refactor(escrow): return dedicated ContractBounds from get_bounds
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Extract the repeated contract load and status check preamble into a require_active_contract helper" labels: type:refactor, area:lifecycle, stack:soroban, stack:rust, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
deposit_funds, release_milestone, refund_unreleased_milestones, cancel_contract, raise_dispute, and submit_work_evidence each open with the same block: load the Contract from storage, panic if missing, then reject terminal statuses. The duplication is why guards drift between entrypoints as new statuses are added.
- Repository scope: Talenttrust/Talenttrust-Contracts only.
- Add a
require_active_contract(env, contract_id) -> Contracthelper that loads, verifies existence, extends TTL, and rejectsCancelled,Refunded, and finalized states. - Replace the inline preamble in every mutating entrypoint with the helper, keeping each entrypoint's additional status requirements explicit at the call site.
- Preserve the exact
EscrowErrorvariants currently emitted so existing negative-path tests stay green.
- Fork the repo and create a branch
git checkout -b refactor/contracts-require-active-contract- Write code in:
contracts/escrow/src/lib.rs - Write comprehensive tests in:
contracts/escrow/src/test/lifecycle.rs - Add documentation: README / docs
- Include NatSpec-style
///comments
- Run
cargo fmt --all -- --check,cargo build,cargo test - Cover edge cases and failure paths
refactor(escrow): centralize contract load and status guard
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated.