Skip to content

EscrowService.splitRelease() invokes a 'split_release' method that doesn't exist on the real deployed contract #161

Description

@chonilius

SorobanClientService's TODO comment documents an assumed split_release function distinct from release: fn split_release(env, bounty_id: BytesN<32>, recipients: Vec<Address>, bps: Vec<u32>) -> i128. The real mergefi-escrow contract (MergeFi/contracts, contracts/escrow/src/lib.rs) has no split_release entrypoint at all — team-split payouts are handled by the same release() function used for single-recipient payouts, which always takes a recipients: Vec<(Address, u32)> (a vector of (address, basis_points) tuples, not two parallel Vec<Address>/Vec<u32> arrays as the backend's assumed signature has it); a single recipient at 10,000 bps is just the degenerate case of the same call.

EscrowController.splitReleaseEscrowService.splitReleasesoroban.invoke('split_release', ...) will call a method name that a real deployment of mergefi-escrow simply does not export, meaning every team-split bounty payout will fail simulation outright once dry-run mode is turned off. This also means EscrowService.release() and EscrowService.splitRelease() — two separate backend code paths today, with separately-recorded Payment logic in each — should likely converge into a single on-chain call once wired to the real contract, since the contract itself doesn't distinguish them.

Metadata

Metadata

Assignees

Labels

Stellar WaveIssues in the Stellar wave programarchitectureArchitecture/design issuebugSomething isn't workinghelp wantedExtra attention is neededvery hardVery difficult task, expert-level effort required

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions