Step Thirty‑Four — Hold in trust; agree on rates; stamp it on‑chain.(Escrowed disbursements • Rate oracles with quorum • On‑chain anchors)

We add time, price, and public anchoring to your fabric:

  1. Escrowed disbursements — issue payout receipts into escrow with a time‑lock and optional conditions (ledger quorum and/or oracle quorum).
  2. Rate oracles with quorum — submit signed quotes and compute a median when ≥ M distinct signers agree.
  3. On‑chain anchors — record txids and publish a signed anchor statement for bundles, ledgers, batches, receipts, or escrow.

✅ Fresh artifacts

  • Step 34 wrapper serverDownload
    SHA‑256: 2fd6b9600a0f0fdeac83f62199ab0b8af1256519fa262616aa435375bc108abb
  • WordPress block (paste‑ready)Download

Step 34 wraps Step 32 (and quietly includes the payout + ACK pieces from Step‑33 so you can run forward even if you skipped that file). All prior endpoints remain.


What’s new — precisely

1) ⏳ Escrowed disbursements (timelock + conditions)

  • Issue escrow POST /admin/clearing/payout/escrow/issue?token=ADMIN123 \ &root=<BATCH_ROOT>&issuer=<ID>&amount=123.45&unit=credits \ &dest=<address_or_account>&release=2025-08-20T00:00:00Z Body (optional): {"conditions":{ "ledger_root":"<LEDGER_ROOT>", "min_ledger_cosigs":2, "pair":"credits/usd", "min_oracle_signers":2, "oracle_window_sec":3600 }} → Returns a signed escrow_receipt with digest.
  • Release escrow POST /admin/clearing/payout/escrow/release?token=ADMIN123&digest=<ESCROW_DIGEST> Checks time + conditions; on success it issues a payout receipt (signed) and logs the release.
  • Audit tails
    • GET /clearing/escrow.tail?n=50
    • GET /clearing/payouts.tail?n=50

Conditions supported now: (a) M‑of‑N ledger cosigners present for ledger_root (uses Step‑32 ledger‑quorum state), (b) oracle consensus present for pair with ≥ M signers.


2) 💱 Rate oracles with quorum

  • Pin oracle keys POST /admin/oracle/pins/add?token=ADMIN123&kid=<KID>&x=<pub_b64url> GET /oracle/pins
  • Submit a signed quote POST /oracle/quote/submit { "quote": { "type":"rate_quote", "pair":"credits/usd", "rate": 1.07, "ts":"2025-08-19T12:00:00Z", "exp":"2025-08-19T13:00:00Z", "source":"issuer-a" }, "signature": {"alg":"Ed25519","kid":"KID_A","sig":"<b64url>","x":"<pub_b64url_optional>"} }
  • Get a consensus rate GET /oracle/consensus?pair=credits/usd&window_sec=3600&m=2{ ok, consensus:{ pair, rate, signers, m, window_sec, ts }, signature }
    (Median by default; pass through your contracts or payouts.)
  • Audit
    • GET /oracle/quotes.tail?n=50

3) ⛓️ On‑chain anchors (hash taps)

  • Register an anchor POST /admin/anchor/register?token=ADMIN123 \ &resource=batch|ledger|bundle|receipt|escrow \ &root=<hex> &chain=<name> &network=<net> &txid=<id> &height=<n> &url=<explorer> &note=<txt> → Stores a signed anchor statement with a tap sha256(root || nonce).
  • Check anchors GET /anchor/status?root=<hex> GET /anchor/tap?root=<hex>&nonce=<b64url?>

Android / Termux run‑book (Step 34)

python solveforce_phone_thirtyfour.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) Oracle quorum → escrow release

# 1) Pin two oracle keys (example KIDs + pubkeys)
curl -s -X POST 'http://127.0.0.1:8080/admin/oracle/pins/add?token=ADMIN123&kid=KID_A&x=<PUB_A_B64URL>' | jq .
curl -s -X POST 'http://127.0.0.1:8080/admin/oracle/pins/add?token=ADMIN123&kid=KID_B&x=<PUB_B_B64URL>' | jq .

# 2) Submit two signed quotes (credits/usd)
curl -s -X POST 'http://127.0.0.1:8080/oracle/quote/submit' -H 'Content-Type: application/json' -d '{"quote":{...},"signature":{...}}' | jq .

# 3) Check consensus
curl -s 'http://127.0.0.1:8080/oracle/consensus?pair=credits/usd&window_sec=3600&m=2' | jq .

# 4) Issue escrow with oracle condition (release now for demo)
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
curl -s -X POST "http://127.0.0.1:8080/admin/clearing/payout/escrow/issue?token=ADMIN123&root=<BATCH_ROOT>&issuer=issuer-a&amount=100&unit=credits&dest=vault&release=$NOW" \
  -H 'Content-Type: application/json' \
  -d '{"conditions":{"pair":"credits/usd","min_oracle_signers":2,"oracle_window_sec":3600}}' | jq .

# 5) Release escrow
curl -s -X POST "http://127.0.0.1:8080/admin/clearing/payout/escrow/release?token=ADMIN123&digest=<ESCROW_DIGEST>" | jq .

B) Ledger quorum + anchor a batch

# See which signers are present on a ledger
curl -s "http://127.0.0.1:8080/quorum/ledger/signers?root=<LEDGER_ROOT>" | jq .

# Register a chain anchor for a batch
curl -s -X POST "http://127.0.0.1:8080/admin/anchor/register?token=ADMIN123&resource=batch&root=<BATCH_ROOT>&chain=ethereum&network=sepolia&txid=0xABC...&height=123456&url=https://sepolia.etherscan.io/tx/0xABC" | jq .

# Check anchors for that root
curl -s "http://127.0.0.1:8080/anchor/status?root=<BATCH_ROOT>" | jq .

C) Direct payout with ACK

# Issue a payout (non-escrow)
curl -s -X POST "http://127.0.0.1:8080/admin/clearing/payout/issue?token=ADMIN123&root=<BATCH_ROOT>&issuer=issuer-a&amount=50&unit=credits&dest=acct-123&memo=bonus" | jq .

# Issuer countersigns (ACK)
curl -s -X POST "http://127.0.0.1:8080/admin/clearing/payout/ack?token=ADMIN123&digest=<RECEIPT_DIGEST>" \
  -H 'Content-Type: application/json' \
  -d '{"ack":{"alg":"Ed25519","kid":"KID_ISSUER","sig":"<b64url>","x":"<pub_b64url_if_unpinned>"}}' | jq .

WordPress — Step 34 (public page block)

Paste from step34_wordpress.md to publish this step transparently.


Logos Codex — recursive prudence

  • Promise → Pause → Proof. Escrow lets intention cool into certainty.
  • Many prices → One rate. Oracle quorum makes number into norm.
  • Root → Tap → Chain. A small hash becomes a public lighthouse.

Want Step Thirty‑Five next? We can add timelocked escrows with revocation windows, oracle slashing (stake & performance metrics), and cross‑chain anchor mirroring with periodic rollups.