Skip to content

Close #1622, #1624, #1625, #1626: SLO alerts, SBT certificates, DAO timelock, quadratic funding hardening - #1705

Closed
Junirezz wants to merge 4 commits into
StellarDevHub:mainfrom
Junirezz:fix-1622-1624-1625-1626
Closed

Junirezz wants to merge 4 commits into
StellarDevHub:mainfrom
Junirezz:fix-1622-1624-1625-1626

Conversation

@Junirezz

Copy link
Copy Markdown
Contributor

Closes #1622
Closes #1624
Closes #1625
Closes #1626

Heads-up: the Rust changes were not compiled or tested. This machine has no link.exe, so no cargo build or cargo test was run. CI is the first real check. Please review the contract commits closely.

#1622 Alerting (backend + monitoring)

  • Prometheus rules in monitoring/prometheus/alert.rules.yml: API 5xx rate >1%, p95 >1500 ms, DB pool >85%, RPC probe failure >5%. Each has a minimum-traffic guard and a \ or:\ window.
  • Alertmanager in monitoring/alertmanager/config.yml: PagerDuty for critical, webhook for warnings. Secrets are read from files.
  • monitoring/runbooks.md has one section per alert; annotations link to it.
  • Backend: the exporter had only an average-latency gauge and no pool or RPC metrics. Added \w3sl_http_request_duration_milliseconds\ histogram (1500 ms is a bucket edge), \w3sl_external_probe_total{probe,outcome}, and \w3sl_db_pool_utilization_percent. Tests: \�ackend/tests/metricsSlo.test.ts; existing metrics tests still pass.

Caveats

  • There is no Soroban RPC call site in the backend. The only real probe is \deepReadiness, which calls Horizon's ledgers endpoint, so the RPC alert watches \probe="horizon_ledger".
  • The DB pool gauge updates only when the DB health check runs. If nothing calls it on a schedule, the pool alert will go stale.

#1624 SBT certificate

  • \ ransfer\ / \ ransfer_from\ panic with \NonTransferable\ (certificate: code 107; certificate_nft: 406).

  • evoke_certificate\ publishes \CertificateRevokedEvent;
    evoke_certificate_with_institution_sig\ verifies an ed25519 signature.
  • Optional \expires_at; \�erify_certificate\ returns Valid/Expired/Revoked/NotFound (revoked takes precedence).
  • Fixed the unclosed braces in \certificate_nft/src/lib.rs.
  • Gaps: no positive institutional-signature test (needs a dev-dependency); no \ ypes.rs\ (types stay in \lib.rs).

#1625 DAO governance

  • Proposal threshold, voting period bounds (default 7 days), quorum of 2000 bps of granted credits, 48h timelock before \execute.
  • Snapshot: a grant after proposal creation does not add voting power. This is conservative: a post-creation grant that was already spent is still subtracted.
  • Resolved the duplicate \DaoError\ (kept 401-410, added 411-418) and the missing brace.

#1626 Quadratic voting/funding

  • \quadratic_voting/src/math.rs: checked \isqrt\ and quadratic cost.
  • Funding checks \sybil_resistance::is_verified\ when a sybil contract is set.
  • Commit-reveal donation rounds (\commit_donation, \open_reveal,
    eveal_donation).
  • Distribution gives the rounding remainder to the largest-weight project, so payouts equal the pool exactly.
  • Gaps: \quadratic_voting\ still has only the linear matching weight; no \QfError\ enum (panic strings used, to keep existing tests).

Verification

  • Backend: \ sc\ has no errors in the touched files; metrics and readiness-related jest suites pass (69 tests incl. new \metricsSlo).
  • Monitoring: YAML parses; every runbook anchor resolves.
  • Contracts: not compiled. Brace and paren counts balance in every changed file.

GitHub Copilot added 4 commits October 17, 2026 16:29
…for alerts (StellarDevHub#1622)

- Prometheus rules: API 5xx rate, p95 latency, DB pool utilisation, RPC probe failure rate

- Alertmanager: PagerDuty for critical, webhook for warnings; secrets read from files

- Runbook per alert, linked from alert annotations

- Backend: cumulative request-duration histogram, probe counters, DB pool gauge
…fication (StellarDevHub#1624)

- transfer/transfer_from panic with NonTransferable

- revoke publishes CertificateRevokedEvent; optional institution ed25519 revocation

- Optional expires_at and verify_certificate returning Valid/Expired/Revoked/NotFound

- Fix unclosed braces in certificate_nft lib.rs
StellarDevHub#1625)

- Minimum proposal threshold and bounded voting period (default 7 days)

- Quorum of 20% of granted credits; 48h timelock before execute

- Grants after proposal creation do not add voting power

- Resolve duplicate DaoError and fix syntax error in lib.rs
…t pool split (StellarDevHub#1626)

- math.rs: checked isqrt and quadratic cost

- Funding checks sybil_resistance is_verified when configured

- Commit-reveal donation rounds

- Distribution assigns rounding remainder so payouts equal the pool
@vercel

vercel Bot commented Oct 17, 2026

Copy link
Copy Markdown

@monikyvitorial-lang is attempting to deploy a commit to the Ayomide Adeniran's projects Team on Vercel.

A member of the Team first needs to authorize it.

@Junirezz

Copy link
Copy Markdown
Contributor Author

Superseded: split into one PR per issue (#1622, #1624, #1625, #1626). Closing this combined PR.

@Junirezz Junirezz closed this Oct 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment