Step Thirty‑Five — Hold with a right to claw; weigh the oracles; mirror the chains.(Timelocked escrows + revocation • Oracle staking & slashing • Cross‑chain anchor mirroring + rollups)

We add discipline, accountability, and broadcast to your network:

  1. Timelocked escrows with revocation windows — issue escrows with release, revocation_until, and optional not_after caps, then revoke, extend, or sweep‑release when conditions mature.
  2. Oracle staking & slashing — keep balances for oracle KIDs, compute deviation from the median, and slash those who drift beyond your policy.
  3. Cross‑chain anchor mirroring + rollups — mirror anchors to other chains and produce signed rollups summarizing anchors in a time window.

✅ Fresh artifacts

  • Step 35 wrapper serverDownload
    SHA‑256: 3e604d850bd46718115020faced25f1d3444d21138325b004e8cadd2c894dca0
  • WordPress block (paste‑ready)Download

Step 35 wraps Step 34 (which wrapped 32→31→30→…→18). All earlier endpoints keep working.


What’s new — precisely

1) ⏳ Timelocked escrows with revocation windows

Endpoints

  • Issue (v2) — includes revocation & horizon: POST /admin/clearing/payout/escrow/issue2?token=ADMIN123 \ &root=<BATCH_ROOT>&issuer=<ID>&amount=123.45&unit=credits \ &dest=<address>&release=2025-08-20T00:00:00Z \ &revocation_until=2025-08-21T00:00:00Z&not_after=2025-09-01T00:00:00Z Body (optional conditions as in Step‑34):
    {"conditions":{"ledger_root":"<LEDGER_ROOT>","min_ledger_cosigs":2,"pair":"credits/usd","min_oracle_signers":2,"oracle_window_sec":3600}}
  • Revoke within window POST /admin/clearing/payout/escrow/revoke?token=ADMIN123&digest=<ESCROW_DIGEST>
  • Extend release (≤ not_after) POST /admin/clearing/payout/escrow/extend?token=ADMIN123&digest=<ESCROW_DIGEST>&release=<ISO>
  • Sweep (attempt releases for eligibles) POST /admin/clearing/payout/escrow/sweep?token=ADMIN123&limit=100
  • Status GET /clearing/escrow/status?digest=<ESCROW_DIGEST>

States: escrowed | revoked | released | expired with metadata (release, revocation_until, not_after, conditions).

Under the hood: events append to audit/clearing/escrow.jsonl (escrow_issue2, escrow_revoke, escrow_extend, escrow_release). Status is computed from the event history.


2) 🏦 Oracle staking & slashing

Policy levers: deviation threshold (percentage of median over a window) and penalty per violation.

Endpoints

  • Deposit stake: POST /admin/oracle/stake/deposit?token=ADMIN123&kid=<KID>&amount=100
  • Manual slash: POST /admin/oracle/stake/slash?token=ADMIN123&kid=<KID>&amount=5&why=calibration
  • View balances: GET /oracle/stake?kid=<KID> GET /oracle/stake.all
  • Performance stats (median + per‑KID deviation): GET /oracle/perf?pair=credits/usd&window_sec=3600
  • Auto‑slash (e.g., >10% off the median in last hour → minus 1 credit): POST /admin/oracle/auto-slash?token=ADMIN123&pair=credits/usd&window_sec=3600&threshold_pct=0.10&penalty=1.0

Files:

  • audit/oracle/stakes.json & stakes.jsonl — balances and stake events.

3) ⛓️ Cross‑chain anchor mirroring + rollups

Endpoints

  • Mirror an anchor across chains: POST /admin/anchor/mirror?token=ADMIN123 \ &root=<hex>&from=<chain.net>@<txid> \ &chain=<name>&network=<net>&txid=<id>&height=<n>&url=<explorer> → Stored as a signed mirror anchor (note includes mirror_of=).
  • Build a signed anchor rollup (time window): POST /admin/anchor/rollup?token=ADMIN123&since=ISO&until=ISO&by=chain Lists counts per chain.network and per resource. Saves to
    audit/anchors/rollups/rollup-*.json.
  • Browse rollups: GET /anchor/rollups GET /anchor/rollup?root=<root>

Android / Termux run‑book (Step 35)

python solveforce_phone_thirtyfive.py \
  --pins-file /sdcard/solveforce/pins.json \
  --ledger-quorum-file /sdcard/solveforce/ledger.quorum.json \
  --clearing-policy-file /sdcard/solveforce/clearing.policy.json \
  --discovery-dod-enable \
  --discovery-dod-source https://directory1.example.com/solveforce/peers.json \
  --discovery-dod-jwks   https://directory1.example.com/jwks.json \
  --quorum-auto-enable \
  --quorum-policy-file /sdcard/solveforce/quorum.policies.json \
  --attest-enable \
  --attest-url https://your-site.tld/wp-json/solveforce/v1/attest \
  --attest-header "Authorization: Bearer <WP_TOKEN>" \
  --host 0.0.0.0 --port 8080 \
  --plugins-dir ~/solveforce/plugins \
  --auth-mode protected \
  --auth-token READER1:reader \
  --allow-admin --admin-token ADMIN123 \
  --schema-ed25519-secret-file /sdcard/solveforce/schema.ed25519.seed \
  --schema-signing-secret-file /sdcard/solveforce/schema.hmac.key \
  --audit-dir ./audit \
  --mirror-enable \
  --mirror-target-url https://your-site.tld/wp-json/solveforce/v1/notary \
  --mirror-header "Authorization: Bearer <WP_TOKEN)" \
  --allow-query-token --open-ui

“Show me” sequences

A) Issue escrow w/ revocation window and then revoke

NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
REV=$(date -u -d '+2 hours' +%Y-%m-%dT%H:%M:%SZ)
curl -s -X POST "http://127.0.0.1:8080/admin/clearing/payout/escrow/issue2?token=ADMIN123&root=<BATCH_ROOT>&issuer=issuer-a&amount=100&unit=credits&dest=vault&release=$NOW&revocation_until=$REV" | jq .
curl -s "http://127.0.0.1:8080/clearing/escrow/status?digest=<ESCROW_DIGEST>" | jq .
curl -s -X POST "http://127.0.0.1:8080/admin/clearing/payout/escrow/revoke?token=ADMIN123&digest=<ESCROW_DIGEST>" | jq .

B) Slash outlier oracles

curl -s -X POST 'http://127.0.0.1:8080/admin/oracle/stake/deposit?token=ADMIN123&kid=KID_A&amount=50' | jq .
curl -s -X POST 'http://127.0.0.1:8080/admin/oracle/auto-slash?token=ADMIN123&pair=credits/usd&window_sec=3600&threshold_pct=0.1&penalty=1.0' | jq .
curl -s 'http://127.0.0.1:8080/oracle/stake.all' | jq .

C) Mirror an anchor and roll up

curl -s -X POST "http://127.0.0.1:8080/admin/anchor/mirror?token=ADMIN123&root=<ROOT>&from=ethereum.sepolia@0xABC&chain=bitcoin&network=testnet&txid=0000...&height=12345&url=https://mempool.space/testnet/tx/0000" | jq .
SINCE=$(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ)
UNTIL=$(date -u +%Y-%m-%dT%H:%M:%SZ)
curl -s -X POST "http://127.0.0.1:8080/admin/anchor/rollup?token=ADMIN123&since=$SINCE&until=$UNTIL&by=chain" | jq .
curl -s 'http://127.0.0.1:8080/anchor/rollups' | jq .

WordPress — Step 35 (public page block)

Use step35_wordpress.md to publish this step transparently.


Logos Codex — recursive justice

  • Promise → Grace → Clarity. A revocation window respects both intent and reality.
  • Measure → Median → Merit. Oracles prosper by truth; they wither by drift.
  • Anchor → Mirror → Chronicle. Your roots walk many chains, then gather back into a single signed story.

When you’re ready for Step Thirty‑Six, we can add: escrow disputes with multi‑party arbitration, oracle reward distribution proportional to accuracy, and cross‑domain rollup notarization (M‑of‑N signatures on anchor rollups).