Step Thirty‑Three — Call the circle; pay the makers; invite the signatures.(Clearing batch quorum • Payout receipts (+ ACK) • Auto co‑signature solicitation)

We give settlement teeth and ceremony:

  1. Clearing batch quorum (M‑of‑N) — batches now support multi‑issuer co‑signatures verified against your pinned settlement keys.
  2. Payout receipts — issue a per‑issuer, signed receipt from a batch; issuers can ACK by countersigning.
  3. Auto co‑signature solicitation (webhooks) — ping designated signers with a nonce‑bound challenge to gather signatures on demand.

✅ Fresh artifacts

  • Step 33 wrapper serverDownload
    SHA‑256: e0792cbee7422eafaf875c7a07642a6c760b7e6f29099c5c4e36c5f84e471685
  • WordPress block (paste‑ready)Download

Step 33 wraps Step 32 (which wraps 31→…→18). All previous endpoints keep working.


What’s new — precisely

1) 🗳️ Clearing batch quorum (M‑of‑N)

Co‑sign clearing batches (Step 32) and check whether you’ve reached quorum.

Endpoints

  • GET /clearing/quorum — active policy ({"m":2,"signers":[{"kid":"…"}]} from --clearing-quorum-file).
  • GET /clearing/signers?root=<BATCH_ROOT> — which required signers are present.
  • Admin:
    • POST /admin/clearing/cosign?token=…&root=<BATCH_ROOT> with body {"signature":{"alg":"Ed25519","kid":"…","x?":"…","sig":"…"}}.
    • POST /admin/clearing/selfsign?token=…&root=<BATCH_ROOT> — adds our signature.

Signatures are checked against pinned settlement_pubkeys (Step 31 pins).


2) 💸 Payout receipts (+ issuer ACK)

Generate and verify payout receipts tied to a batch’s payouts[issuer].

Endpoints

  • Admin: POST /admin/clearing/payout/issue?token=…&root=<BATCH_ROOT>&issuer=<ID>&memo=…&dest=…
    → returns: { "digest":"<sha256>", "body":{"type":"payout_receipt","batch_root":"<root>","issuer":"<ID>","amount":123.0,"unit":"credits","dest":"...","memo":"...","nonce":"...","ts":"...Z"}, "signature":{"alg":"Ed25519","kid":"<sha16>","x":"<pub_b64url>","sig":"<b64url>"}, "acks":[] }
  • POST /clearing/payout/verify with { "body":{...}, "signature":{...} } — verify.
  • Admin: POST /admin/clearing/payout/ack?token=…&digest=<RECEIPT_DIGEST> with body {"ack":{"alg":"Ed25519","kid":"…","sig":"…","x?":"…"}} — issuer countersigns the receipt body.
  • GET /clearing/payouts.tail?n=50 — audit stream of issues/acks.

3) 🤝 Automatic co‑signature solicitation (webhooks)

Invite signers to co‑sign ledgers or batches by POSTing a nonce‑bound challenge to their webhook.

Policy files (same shape for ledger / clearing):

{"signers":[{"kid":"KID_A","url":"https://signer-a.example/solveforce/cosign","header":["Authorization: Bearer …"],"basic":""}]}

Endpoints

  • Admin: POST /admin/quorum/ledger/solicit?token=…&root=<LEDGER_ROOT>
  • Admin: POST /admin/clearing/solicit?token=…&root=<BATCH_ROOT>

Request body sent to signers

{"type":"cosign_request","resource":"ledger|batch","root":"<root>","hdr":{...},"alg":"Ed25519","kid":"<their_kid?>","nonce":"<b64url>","ts":"...Z"}

Expected reply

{"signature":{"alg":"Ed25519","kid":"<kid>","sig":"<b64url>","x?":"<pub_b64url>"}}

We verify and persist; results are logged to audit/solicit.jsonl.


Android / Termux run‑book (Step 33)

# Example quorum + solicitation configs
echo '{"m":2,"signers":[{"kid":"KID_A"},{"kid":"KID_B"}]}' > /sdcard/solveforce/clearing.quorum.json
echo '{"signers":[{"kid":"KID_A","url":"https://signer-a.example/cosign"}]}' > /sdcard/solveforce/ledger.solicit.json
echo '{"signers":[{"kid":"KID_B","url":"https://signer-b.example/cosign"}]}' > /sdcard/solveforce/clearing.solicit.json

python solveforce_phone_thirtythree.py \
  --pins-file /sdcard/solveforce/pins.json \
  --clearing-quorum-file /sdcard/solveforce/clearing.quorum.json \
  --ledger-quorum-file /sdcard/solveforce/ledger.quorum.json \
  --solicit-ledger-file /sdcard/solveforce/ledger.solicit.json \
  --solicit-clearing-file /sdcard/solveforce/clearing.solicit.json \
  --clearing-policy-file /sdcard/solveforce/clearing.policy.json \
  --quorum-auto-enable \
  --quorum-policy-file /sdcard/solveforce/quorum.policies.json \
  --discovery-dod-enable \
  --discovery-dod-source https://directory1.example.com/solveforce/peers.json \
  --discovery-dod-jwks   https://directory1.example.com/jwks.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” commands

A) Batch quorum

# Add a co-signature for a batch (from a pinned KID)
curl -s -X POST 'http://127.0.0.1:8080/admin/clearing/cosign?token=ADMIN123&root=<BATCH_ROOT>' \
  -H 'Content-Type: application/json' \
  -d '{"signature":{"alg":"Ed25519","kid":"KID_B","sig":"<b64url>","x":"<pub_b64url_if_unpinned>"}}' | jq .
# Check quorum:
curl -s 'http://127.0.0.1:8080/clearing/signers?root=<BATCH_ROOT>' | jq .

B) Payout + ACK

# Issue a payout receipt for issuer X
curl -s -X POST 'http://127.0.0.1:8080/admin/clearing/payout/issue?token=ADMIN123&root=<BATCH_ROOT>&issuer=<X>&memo=August%20payout' | jq .
# Verify the receipt:
curl -s -X POST 'http://127.0.0.1:8080/clearing/payout/verify' -H 'Content-Type: application/json' -d '{"body":{...},"signature":{...}}' | jq .
# Issuer ACK (countersign)
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_B","sig":"<b64url>","x":"<pub_b64url_if_unpinned>"}}' | jq .
# Tail
curl -s 'http://127.0.0.1:8080/clearing/payouts.tail?n=20' | jq .

C) Auto-solicit signatures

# Ask ledger signers to co-sign a ledger
curl -s -X POST 'http://127.0.0.1:8080/admin/quorum/ledger/solicit?token=ADMIN123&root=<LEDGER_ROOT>' | jq .
# Ask batch signers to co-sign a clearing batch
curl -s -X POST 'http://127.0.0.1:8080/admin/clearing/solicit?token=ADMIN123&root=<BATCH_ROOT>' | jq .

WordPress — Step 33 (public page block)

Use step33_wordpress.md.
It explains: Clearing Quorum, Payout Receipts (+ ACK), and Auto Solicitation for your readers.


Logos Codex — recursive economy

  • Labor → Ledger → Legitimacy.Batches are not final until the circle signs.
  • Promise → Receipt → Acknowledgment.We pay, we prove, they nod—two signatures make a handshake.
  • Summon → Sign → Settle.The network invites its elders; consent arrives as ink on a number.

When you’re ready for Step Thirty‑Four, we can add: escrowed disbursements (timelocked receipts), rate oracles with quorum, and on‑chain anchors for batches & receipts (Merkle‑anchored hash taps).

Key terms in plain language

Open a term for a concise explanation of language used on this page.

Broadband

A general term for always-on, high-speed Internet access. Broadband can be delivered over fiber, cable, DSL, fixed wireless, cellular, or satellite networks.

Fiber Internet

Internet delivered through strands of glass using light. Fiber commonly supports high capacity, low latency, and strong upload performance, but availability must be confirmed for the exact address.

Bandwidth

The amount of data a connection can carry in a given time, usually measured in Mbps or Gbps. More bandwidth supports more users, devices, and simultaneous applications.

Latency

The time it takes data to travel between two points. Lower latency improves voice, video meetings, cloud applications, gaming, and other real-time services.

Dedicated Internet Access (DIA)

A business-grade Internet connection with capacity dedicated to the customer rather than shared in the same way as typical consumer broadband. It often includes symmetrical speeds and an SLA.

SD-WAN

Software-defined wide area networking. It manages multiple connections and chooses paths based on application needs, performance, and policy to improve resilience and control.