Repository navigation
Implement on-chain dispute resolution with arbitration voting #344
Copy link
Copy link
Open
Labels
GrantFox OSSIssue tracked in GrantFox OSSIssue tracked in GrantFox OSSMaybe RewardedIssue may be eligible for a GrantFox rewardIssue may be eligible for a GrantFox rewardOfficial CampaignCampaign: Official CampaignCampaign: Official CampaignOfficial Campaign | FWC26Campaign: Official Campaign | FWC26Campaign: Official Campaign | FWC26complexity: highComplex feature requiring deep knowledge - 200 ptsComplex feature requiring deep knowledge - 200 ptsfeatureNew contract feature or operationNew contract feature or operationgrantfoxIssue for GrantFox programIssue for GrantFox program
Description
Overview
Build a full dispute lifecycle into the contract. Any payer on an invoice can open a dispute before release. A configurable set of arbitrators votes to resolve or reject. Funds are frozen during dispute and released/refunded according to the outcome.
Requirements
open_dispute(env, invoice_id, payer, reason: String)— opens a dispute, freezes the invoice (cannot release/refund while open)vote_dispute(env, invoice_id, arbitrator, approve: bool)— arbitrator casts a vote; requires the caller to be in the stored arbitrator setresolve_dispute(env, invoice_id)— callable by anyone once quorum is reached; resolves the invoice according to majority vote (approve → release, reject → refund)- Dispute state stored under a new
dispute_key(invoice_id)storage key - Emit
DisputeOpened,DisputeVoteCast,DisputeResolvedevents - Admin can configure
arbitrator_setandquorum_threshold(e.g. 2-of-3) - Write unit tests for: open → vote → resolve (approve path), open → vote → resolve (reject path), duplicate vote rejected, non-arbitrator vote rejected, dispute on non-existent invoice
Acceptance Criteria
- All three entry points implemented
- Frozen invoice cannot be released or refunded during open dispute
- Quorum logic correct for configurable N-of-M threshold
- Storage snapshot test updated with new
dispute_key - All existing tests pass
-
cargo test --workspacepasses with zero failures -
cargo clippy --all-targets -- -D warningsproduces zero warnings
Definition of Done
All CI checks must pass before the PR is reviewed.
Metadata
Metadata
Assignees
Labels
GrantFox OSSIssue tracked in GrantFox OSSIssue tracked in GrantFox OSSMaybe RewardedIssue may be eligible for a GrantFox rewardIssue may be eligible for a GrantFox rewardOfficial CampaignCampaign: Official CampaignCampaign: Official CampaignOfficial Campaign | FWC26Campaign: Official Campaign | FWC26Campaign: Official Campaign | FWC26complexity: highComplex feature requiring deep knowledge - 200 ptsComplex feature requiring deep knowledge - 200 ptsfeatureNew contract feature or operationNew contract feature or operationgrantfoxIssue for GrantFox programIssue for GrantFox program
Activity
nurudeenheroic commentedon Jul 16, 2026
Hi! I can handle this issue and ensure it meets the requirements.
guptakumarranjeet150 commentedon Sep 13, 2026
Hello! I'd like to work on this issue.
I can tackle
Implement on-chain dispute resolution with arbitration voting. Proposed implementation roadmap:Stellar-split/split-contractsImplement on-chain dispute resolution with arbitration votingwith explicitrequire_authchecks, clean storage layouts, and robust Soroban contract logic.I am ready to start immediately—please assign this to me!
ranjeet150 commentedon Sep 14, 2026
Hello @maintainers,
I would like to resolve this issue. Here is my proposed execution plan:
Implement on-chain dispute resolution with arbitration votingwith explicitrequire_authchecks, clean storage layouts, and robust Soroban contract logic.Ready to deliver a clean, tested PR within 12–24 hours. Please assign!
ZacLou commentedon Sep 14, 2026
I'd like to work on this issue. I have experience with Rust and Soroban smart contracts. I'll implement the full dispute lifecycle:
dispute_key(invoice_id)storageDisputeOpened,DisputeVoted,DisputeResolvedeventsMy approach:
Looking forward to assignment.
shobhamerabacha-star commentedon Sep 14, 2026
Hello! I'd like to work on this issue.
I would love to take this on. My planned approach:
Implement on-chain dispute resolution with arbitration votingwith explicitrequire_authchecks, clean storage layouts, and robust Soroban contract logic.Looking forward to contributing—please feel free to assign!
rupesh-kumar-sah commentedon Oct 3, 2026
Hello team,
I looked into
Implement on-chain dispute resolution with arbitration votingand have an implementation approach ready.Technical outline:
Ready to implement immediately upon assignment. Please feel free to assign!
ravimahatonp commentedon Oct 9, 2026
Hey team,
Happy to work on this in split-contracts. I have a clean approach to implement on-chain dispute resolution with arbitration voting and will verify the implementation against existing test suites. Please assign me to this issue if it's available.
huangji6693-max commentedon Oct 26, 2026
Hi maintainers! I have implemented on-chain dispute resolution with multi-arbitrator voting (
open_dispute,vote_dispute,resolve_dispute,set_arbitrators) and submitted PR: #1060Summary:
open_dispute(env, invoice_id, payer, reason),vote_dispute(env, invoice_id, arbitrator, approve),resolve_dispute(env, invoice_id), and admin configurationset_arbitrators(env, admin, arbitrator_set, quorum_threshold).ArbitrationDisputeunderdispute_key(invoice_id)(with updatedtests/snapshots/storage_keys.jsonXDR baseline) and emitsDisputeOpened,DisputeVoteCast, andDisputeResolved.cargo test -p split issue_344_tests&cargo test -p split storage_snapshot).