Escrow contract improvements — init, deposit, release_milestone, open_dispute#218
Merged
Conversation
…ed errors; update tests
…typed errors; update tests
|
@akargi 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! 🚀 |
…logic; update tests to match error codes
Contributor
Author
|
@soomtochukwu resolved |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #69
Branch: feat/issue69
This PR implements a set of improvements to the
escrowSoroban contract that harden initialization, token handling, dispute flows, and milestone releases. The goal is safer, more observable, and more debuggable on-chain behavior for the Lance protocol.Summary of changes
Add typed contract errors and events
EscrowError(enum) — typed error codes for failure modes (AlreadyInitialized, NotInitialized, Unauthorized, InvalidInput, JobNotFound, InvalidState, AmountMismatch, NoPendingMilestones).EscrowInitializedEvent— emitted when contract is initialized.AgentJudgeUpdatedEvent— emitted when the admin updates the agent judge.DepositEvent— emitted when a client deposits funds for a job.ReleaseMilestoneEvent— emitted when a milestone is released to the freelancer.OpenDisputeEvent— emitted when either party opens a dispute.Initialize/admin improvements
initialize(env, admin, agent_judge) -> Result<(), EscrowError>AdminandAgentJudgeto instance storage; emitsInitializedevent.set_agent_judge(env, new_agent_judge) -> Result<(), EscrowError>AgentJudgeUpdated.Deposit implementation
deposit(env, job_id, amount) -> Result<(), EscrowError>total_amountand state toFunded, emitsDepositevent.Milestone release implementation
release_milestone(env, job_id, caller) -> Result<(), EscrowError>ReleaseMilestoneevent.Open dispute implementation
open_dispute(env, job_id, caller) -> Result<(), EscrowError>OpenDisputeevent.Tests
contracts/escrow/src/lib.rsto use the new Result-based APIs (unwrap on success or assert errors where appropriate).Why these changes
Security considerations
require_auth()for caller checks.Compatibility notes
initialize,deposit,release_milestone, andopen_disputenow returnResultwith typedEscrowErrorvalues. Callers must handle those results.How to run tests locally
Notes on test execution
Checklist for acceptance
/docs(I can add this in a follow-up).Next steps I can take
/docs/escrow.mddescribing the public API and example flows.Reviewer notes
Closes Implement
Escrow::open_disputelogic #70