Skip to content

feat(rwa-yield-accuracy): Sprint 2 — 4 remaining probes (BUIDL, USTB, BENJI, OUSG) - #1325

Merged
Flotapponnier merged 1 commit into
devfrom
feat/rwa-yield-accuracy-sprint2
Jul 23, 2026
Merged

feat(rwa-yield-accuracy): Sprint 2 — 4 remaining probes (BUIDL, USTB, BENJI, OUSG)#1325
Flotapponnier merged 1 commit into
devfrom
feat/rwa-yield-accuracy-sprint2

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

Sprint 2 of the rwa-yield-accuracy bench. Ships the 4 remaining probes needed for the full V1 cohort.

Dividend-model probes (BUIDL, USTB)

Share price fixed at 1 USD by design; yield materializes as monthly USDC dividends distributed from a specific issuer treasury wallet to token holders. The probes:

  • Read totalSupply now + at t=window ago (block-by-timestamp linear approximation via 12s post-merge block time)
  • Sum USDC Transfer events with from = treasury_wallet across the window (dividend.go shared helper, chunked in 10k-block slices to stay within eth_getLogs limits)
  • Divide by avg supply, annualize, convert to bps
  • Compute deviation vs promised APY from the hot-reloaded config

NAV-appreciation probes (BENJI, OUSG)

Share price grows daily; no on-chain dividend transfers. The probes:

  • Fetch current NAV from the issuer's public JSON endpoint (nav.go shared HTTP helper)
  • Store daily NAV snapshots in an in-memory ring (navRing, 72 slots) so windowed yield becomes computable after the ring is warm
  • Report zero-yield until the ring has coverage; the site's probe_ok label distinguishes this from a real zero
  • Read totalSupply on-chain as a supplementary signal

Known Sprint 3 verification items

The addresses and endpoint URLs are best-known-values in V1. Each is flagged as TODO(Sprint 3) in the code:

  • BUIDL treasury wallet (Securitize distribution wallet on Etherscan)
  • USTB treasury wallet (Superstate)
  • BENJI Ethereum wrapper contract (primary chain is Stellar)
  • Franklin's NAV JSON endpoint + field path
  • Ondo's NAV JSON endpoint + field path
  • Lifetime yield contract deployment blocks for each token

The harness will run and emit metrics with the placeholders; sprint 3 verifies against each issuer's dashboard and adjusts.

Test plan

  • go build clean
  • go vet clean
  • Deploy to VPS ocb-par-main + Prom scrape config (Sprint 3)
  • Cross-check each measurement against issuer's own dashboard (Sprint 3)
  • Verify address + endpoint TODOs (Sprint 3)

… NAV probes

Ships the 4 remaining probes needed for the full V1 cohort:

Dividend model (share price fixed at 1 USD, monthly USDC dividends):
- buidl.go     BlackRock BUIDL
- ustb.go      Superstate USTB
- dividend.go  Shared eth_getLogs helper for USDC Transfer events
               from a specified treasury wallet across a windowed
               block range, chunked in 10k-block slices.

NAV appreciation model (share price grows daily, no dividend transfers):
- benji.go     Franklin BENJI
- ousg.go      Ondo OUSG
- nav.go       Shared JSON HTTP helper + in-memory NAV ring so the
               probe can compute windowed yield without waiting for
               issuers to expose historical NAV via API.

Also promotes all 5 probes into main.go's cohort so the harness
starts producing full deviation gauges on next run.

Known gaps closed in Sprint 3:
- Treasury wallet addresses for BUIDL/USTB are placeholders. Sprint 3
  verifies against Securitize/Superstate docs on Etherscan.
- BENJI/OUSG NAV endpoint URLs are best-guess; Sprint 3 verifies the
  actual public JSON endpoints and the field path within the response.
- Lifetime yield (since inception) is a placeholder zero across all
  probes. Sprint 3 wires the contract deployment block for each.
- BENJI Ethereum wrapper address is TBD; primary chain is Stellar.
  V1 measures via NAV endpoint only; wrapper supply is 'when known'.

Test plan:
- Build + vet clean (no output).
- Local RPC smoke run + cross-check against issuer dashboards deferred
  to Sprint 3 (deploy + verification pass).
@Flotapponnier
Flotapponnier merged commit 383e9d0 into dev Jul 23, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant