Repository navigation
fix(tholos): cap reclaim_stalled_dispute payouts at actual escrow (closes #207) - #211
Conversation
|
This PR's diff includes a large number of unrelated test snapshots across asserter-consumer, demo-consumer, and tholos-v2 that have nothing to do with this fix, plus a self-merge commit in the history. This looks like a branch mix-up on your end (possibly branched from a stale fork main). Please rebase this onto a fresh branch from drydocs/tholos's actual main so the diff only contains the reclaim_stalled_dispute fix and its own test, this is unreviewable as currently scoped. Separately: this issue explicitly depends on #180's AssertionEscrow mechanism, which is still open with requested changes, not yet merged. Once you've rebased cleanly, make sure your fix builds on top of #180's actual final version rather than reimplementing the escrow tracking separately. |
|
@gloskull Checking in, any progress on rebasing this? Let us know if you're still working it or need to hand it off. |
collinsezedike
left a comment
There was a problem hiding this comment.
@gloskull Three things need fixing before this can merge:
-
cargo fmt --checkfails on lib.rs (two spots aroundreclaim_stalled_disputewhere the multi-linetoken_client.transfer(...)calls should collapse to one line). Runcargo fmtand commit the result. -
packages/tholos-sdk/src/index.tsis out of date with the contract's new public interface. Regenerate it perpackages/tholos-sdk/README.mdand commit the result. -
This branch now conflicts with main: PR #214 (merged after this branch was opened) moved admin assignment from
initialize's first parameter into a__constructor(admin)call made at deploy time, soinitializeno longer takes anadminargument. Rebase onto main and updatetest.rs'sinitializecalls (including the newtest_reclaim_stalled_dispute_fee_on_transfertest) to register withenv.register(Tholos, (admin,))and dropadminfrom theinitialize/try_initializeargument lists, matching the rest of the suite.
|
@gloskull Checking in, any progress on the three items above? Let us know if you're still working it or need to hand it off. |
|
Hello @collinsezedike , I'd work on it now. |
55324fd to
7a32446
Compare
|
Hey @gloskull, I've pushed a rework of this PR directly to the branch, superseding the previous commits. Here is why and what changed. While this PR sat unmerged, #216 landed the
All 93 tests pass locally, fmt and clippy are clean, and CI has been approved and is running on the new head. The original review items (formatting, bindings, rebase) are all resolved as part of the rebuild. |
collinsezedike
left a comment
There was a problem hiding this comment.
Hey @gloskull, thank you for the contribution and for getting the original fix started. Merging now.
|
Hey @gloskull, thank you for the contribution. If the work was worth your time, a star on the repo helps other contributors find the project. |
Summary
reclaim_stalled_disputerefunds each side the amount they actually deposited rather than the raw nominal bond, derived from the per-assertion escrow that #216 landed forfinalize/resolve. The asserter's payout is the recorded received bond, the disputer's is the escrow remainder, and both are capped by the contract's live token balance, mirroring the same pattern the other payout paths use.The
refundedfield ofStalledDisputeReclaimednow reports the asserter's refund specifically, since the two sides can differ under a fee-on-transfer token.Testing
test_reclaim_stalled_dispute_fee_on_transfer: a stalled dispute funded with a fee-on-transfer token refunds each side's actual deposit and drains the contract to zero rather than trapping on insufficient balance or overpaying from other assertions' pooled funds.cargo test -p tholos(93 passing),cargo fmt --check,cargo clippy --workspace --all-targets --locked -- -D warningsall clean.Closes #207