Circuit-breaker demo run
TESTNET DEMO ONLY. The lending pool is a deliberately tiny demo (no interest, no liquidation, fixed 1:1 prices) that exists only to show Assay Guard. Figures are demo values, not a real asset’s reserves.
Run on 2026-10-14 by scripts/src/demo-circuit-breaker.ts. Each borrow asks
Assay Guard is_healthy(ADEMO, policy) first. A rejected borrow moves
nothing and records the guard’s reason in a successful transaction (the pool
returns Rejected(reason) and emits borrow_rejected), so every step has a
transaction to open.
Demo policy: minimum coverage 100%, max report age 90 seconds (so the stale step can happen live), at least 1 attestor, disagreement up to 5%, supply mismatch up to 0.5%. Borrow limit 50% of collateral.
The story
Section titled “The story”| Step | Result | Transactions (report, then borrow) |
|---|---|---|
| Fresh report at 101% | borrow succeeded | bda39ffb…, 84fefd06… |
| Attestor posts 92% | borrow rejected (UNDERCOVERED) | 773163e0…, 84d31e35… |
| Fresh report at 100.4% | borrow succeeded | 2956390b…, 683abc8d… |
| No new report past the 90-second max age | borrow rejected (STALE) | ec2c5847… |
Reasons are the guard’s: OK, NO_REPORT, STALE, TOO_FEW_ATTESTORS, UNDERCOVERED, DISAGREEMENT, SUPPLY_MISMATCH.
Checked after the run
Section titled “Checked after the run”- All 22 transactions return
SUCCESSfrom Stellar RPC and open on stellar.expert. - The two successful borrows’ events include the DUSD
transfer; the two rejected borrows emit onlyborrow_rejected, with reasonUndercoveredandStale, and no transfer. - Final position (
position(borrower)): 1,000 ADEMO collateral, 200 DUSD debt (two borrows of 100). - The ADEMO token contract was deployed during D3; its transaction is in TESTNET.md.
Contracts
Section titled “Contracts”| Registry | CBMTQWT7DZOPHQ6WJZN4OYZIFJ6XLSZYRCYJZVOWMWHMQR4TZ3MCOG4U |
| Assay Guard | CCVEIPYTY6RRVJZONFZL4WVGN66H5IU77H3HSSQJKH7I7WSDL6DIEKDV |
| Demo pool (TESTNET DEMO ONLY) | CCQP73IMYC67UUF7R4OIHMEWRZWMUZO2TQEKCTOFGYZ6NUFZT6JNKY33 |
| ADEMO (demo RWA token, collateral) | CC22EDRUYLGMSF4YOP77GKP6O6SQQT6WY2VP6VHNHALTOBPGXNIKRWTB |
| DUSD (demo stablecoin) | CDKWYXW5W5ZOK3FDZFHNGXHNOO6YISS7DBGCSDQTQINVMH7THUTDWDGL |
Setup transactions
Section titled “Setup transactions”| Step | Transactions |
|---|---|
Deploy registry CBMTQWT7DZOPHQ6WJZN4OYZIFJ6XLSZYRCYJZVOWMWHMQR4TZ3MCOG4U |
c9ea09dd… |
Deploy guard CCVEIPYTY6RRVJZONFZL4WVGN66H5IU77H3HSSQJKH7I7WSDL6DIEKDV |
178e373a…, 2e7b3222… |
ADEMO token contract CC22EDRUYLGMSF4YOP77GKP6O6SQQT6WY2VP6VHNHALTOBPGXNIKRWTB (collateral) |
already deployed |
DUSD token contract CDKWYXW5W5ZOK3FDZFHNGXHNOO6YISS7DBGCSDQTQINVMH7THUTDWDGL (demo stablecoin) |
49832143… |
Deploy demo pool CCQP73IMYC67UUF7R4OIHMEWRZWMUZO2TQEKCTOFGYZ6NUFZT6JNKY33 (TESTNET DEMO ONLY) |
39981565…, 93248a20… |
| Registry: register ADEMO (unit USD) | 4688e7db… |
| Registry: add attestor | bd422369… |
| Registry: set supply witness | 36ae64a4… |
| Registry: witness posts supply 1,000,000 ADEMO | 14b903e2… |
| Borrower trustline ADEMO | f1387896… |
| Borrower trustline DUSD | af6760b8… |
| Issuer mints 1,000 ADEMO to the borrower | 33dec226… |
| Fund the pool with 100,000 DUSD | 016129dd… |
| Borrower deposits 1,000 ADEMO as collateral | aa27d961… |
Receipt: audit/e2e-receipts/circuit-breaker-2026-10-14.json.
Reproduce: pnpm --filter @garkuwa/assay-scripts demo:circuit-breaker
(deploys new contracts; needs the testnet identities named in the script).