200 XLM swapped
- Protocol
- Soroswap
- Ledger
- 4,084,752
- Wallet
- GDY2IB6R...GVDSYDN2
- Transaction
- 48dc831a...2d4b3318
End-to-end public proof
A real Soroswap testnet swap was decoded, normalized, accepted as campaign contribution, ranked, finalized, committed on-chain and paid through Grindy Campaign Rails.

Attribution layer
The adapter consumes Stellar RPC event XDR, validates the Soroswap router event and produces the stable event shape consumed by the campaign engine.
{
"schemaVersion": "1.0",
"campaignId": "grindy-stellar-testnet-campaign-001",
"network": "testnet",
"wallet": "GDY2IB6RSKMLRFLAPPCLVRHPDAFYRL6V7SZDZP4QSHP3Y3XMGVDSYDN2",
"protocol": "soroswap",
"action": "swap",
"asset": "XLM",
"amount": "200",
"ledger": 4084752,
"transactionHash": "48dc831a8865641b1af97d817454afa0a1e4643f7fbc7bd058988ef42d4b3318",
"timestamp": "2026-08-11T10:39:53Z",
"eligible": true,
"contribution": "200 XLM eligible volume"
}Scoring and settlement
Grindy freezes the leaderboard and creates the allocation manifest. Soroban commits that result, prevents duplicate payouts and moves only the protocol-funded reward pool.
27f185b31c6c785856541b5222efc76d4ea188a802b22b7a85a0c776709f11dbThis proof paid the attributed activity wallet through the contract's verified batch path. Participant self-claim is implemented and covered by contract tests, but was not used because the public Soroswap wallet is not controlled by Grindy.
On-chain evidence
764cb9...6cc01d026a6438...9c353f0357cc62...623a96042fbec7...3cb3f4058cfe41...ae2124069eb298...b0bcea07a827bf...39cd8308b175e9...c9ca7eAlternative lifecycle proof
A separate escrow instance proves the emergency path without altering Campaign #001's settled state.