Summary
Add on-chain analytics for the Boundless escrow contract using Dune Analytics — a public, SQL-driven dashboard (TVL, bounties funded, payouts) with no indexer infrastructure to run. Dune has indexed Stellar (including Soroban) since Meridian 2024, so the contract's emitted events are queryable directly.
Why (what it gives us)
- Public transparency dashboard — TVL in escrow, bounties funded/completed, total paid out to builders. High-signal for community trust, marketing, and Stellar ecosystem reporting.
- Product / treasury metrics — funded vs. completed bounties, average bounty size, time-to-payout, unique participant/organizer wallets, payout volume by asset (USDC…), over time.
- No infra to run — Dune indexes Stellar for us; this is pure SQL + a dashboard.
How Dune sees the contract
Contract activity lands in Dune's Stellar tables:
| Table |
Use |
history_contract_events |
Soroban contract events + traces — the escrow events land here, filterable by contract address |
contract_data |
Contract state/storage (escrow balances, TTL) |
history_transactions / history_operations / history_effects |
Tx-level detail, actors, fees |
history_ledgers |
Ledger metadata, timing |
Filter history_contract_events to the deployed contract address, then build queries → charts → dashboard.
Events to work with
The contract emits Soroban events such as:
create_event — a bounty escrow is created / funded
add_funds — additional funding to the pool
apply / apply_to_bounty — a participant applies / claims
submit — a submission is anchored on-chain
select_winners — winners chosen; payout settles
See the contract source for the authoritative, complete list and each event's topic + data layout (including any withdraw / refund / cancel / explicit payout).
The real gotcha: Soroban event decoding
Soroban events are XDR / ScVal-encoded (topics + data), so getting clean numbers out (amounts, bounty id, addresses, asset) means decoding those topics/data in SQL. The friction is proportional to how well-structured the emitted events are. Each analytics-relevant event should carry, in a decodable form:
- a stable event / bounty id,
- the amount and asset,
- the relevant address(es) (funder, applicant, winner),
- a clear topic naming the event.
If any of these are missing or hard to decode, part of this task is improving / normalizing the event emissions (and documenting them) so analytics stays reliable.
Scope / tasks
Acceptance criteria
References
Summary
Add on-chain analytics for the Boundless escrow contract using Dune Analytics — a public, SQL-driven dashboard (TVL, bounties funded, payouts) with no indexer infrastructure to run. Dune has indexed Stellar (including Soroban) since Meridian 2024, so the contract's emitted events are queryable directly.
Why (what it gives us)
How Dune sees the contract
Contract activity lands in Dune's Stellar tables:
history_contract_eventscontract_datahistory_transactions/history_operations/history_effectshistory_ledgersFilter
history_contract_eventsto the deployed contract address, then build queries → charts → dashboard.Events to work with
The contract emits Soroban events such as:
create_event— a bounty escrow is created / fundedadd_funds— additional funding to the poolapply/apply_to_bounty— a participant applies / claimssubmit— a submission is anchored on-chainselect_winners— winners chosen; payout settlesSee the contract source for the authoritative, complete list and each event's topic + data layout (including any
withdraw/refund/cancel/ explicitpayout).The real gotcha: Soroban event decoding
Soroban events are XDR / ScVal-encoded (topics + data), so getting clean numbers out (amounts, bounty id, addresses, asset) means decoding those topics/data in SQL. The friction is proportional to how well-structured the emitted events are. Each analytics-relevant event should carry, in a decodable form:
If any of these are missing or hard to decode, part of this task is improving / normalizing the event emissions (and documenting them) so analytics stays reliable.
Scope / tasks
payout/withdraw/refundevents with amounts).history_contract_eventsfor the contract into: TVL, bounties funded, total payouts, participant counts.Acceptance criteria
create_event) filtered to the contract address and returns correct values.References