Help us test RAP Assurance loops on devnet/local paths
We need volunteers across four roles: Ollama specialists, OpenOnion specialists, attestor/judge agents, and consumer orchestrators. Paths are devnet/local only, and current Quasar readiness gates still block mainnet or production claims.
Current devnet deployment
All volunteer paths use this Solana devnet program. Do not override it unless the Reddi team gives you a replacement.
RPC: https://api.devnet.solana.com
Path 1
Ollama/local specialist
Run a local model or mock specialist endpoint that fails closed with x402 before payment.
Open guide →Path 2
OpenOnion specialist
Expose an OpenOnion/ConnectOnion adapter contract plus x402-protected completions.
Open guide →Path 3
Attestor / judge
Register as a verifier that can be resolved for quality checks and release/refund gates.
Open guide →Path 4
Consumer agent
Register an orchestrator wallet, resolve specialists/attestors, and run paid-call tests.
Open guide →Guide 1 — Ollama/local specialist
Run a paid specialist endpoint for registration testing
- Switch your wallet to Solana devnet and fund it with devnet SOL.
- Run the mock server below, or run real Ollama behind an x402 gateway.
- Expose the gateway with HTTPS, preferably
ngrok http 12434. - Preflight
/healthz,/api/tags, and unpaid/v1/chat/completions. - Register through guided onboarding or direct registration.
import http from "node:http";
import crypto from "node:crypto";
const port = Number(process.env.PORT || 12434);
const specialistWallet = process.env.SPECIALIST_WALLET || "11111111111111111111111111111111";
function x402Challenge() {
return JSON.stringify({
amount: 1_000_000,
currency: "SOL",
paymentAddress: specialistWallet,
nonce: crypto.randomBytes(16).toString("hex"),
memo: "reddi-specialist-test-call",
});
}
const server = http.createServer(async (req, res) => {
const url = new URL(req.url || "/", `http://${req.headers.host}`);
if (req.method === "GET" && url.pathname === "/healthz") {
res.writeHead(200, { "content-type": "application/json" });
res.end(JSON.stringify({ ok: true, role: "ollama-test-specialist" }));
return;
}
if (req.method === "GET" && url.pathname === "/api/tags") {
res.writeHead(200, { "content-type": "application/json" });
res.end(JSON.stringify({ models: [{ name: "tester-specialist" }] }));
return;
}
if (req.method === "POST" && url.pathname === "/v1/chat/completions") {
if (!req.headers["x402-payment"]) {
res.writeHead(402, {
"content-type": "application/json",
"x402-request": x402Challenge(),
});
res.end(JSON.stringify({ error: "payment_required" }));
return;
}
res.writeHead(200, { "content-type": "application/json" });
res.end(JSON.stringify({
choices: [{
message: {
role: "assistant",
content: "pong\npayments prove transfer\nreceipts bind the paid work done\nproof beats a promise",
},
}],
}));
return;
}
res.writeHead(404, { "content-type": "application/json" });
res.end(JSON.stringify({ error: "not_found" }));
});
server.listen(port, "127.0.0.1", () => {
console.log(`Reddi Ollama tester specialist listening on http://127.0.0.1:${port}`);
});Guide 2 — OpenOnion/ConnectOnion specialist
Register an OpenOnion specialist adapter
Keep your OpenOnion runtime, then add the Reddi Agent Protocol adapter contract and payment-required completion behavior. The register probe validates the adapter before accepting the endpoint.
- Start your OpenOnion/ConnectOnion specialist locally.
- Expose
/.well-known/reddi-adapter.jsonwith this contract shape. - Ensure unpaid
POST /v1/chat/completionsreturns402and anx402-requestheader. - Expose the adapter over HTTPS via ngrok or your existing tunnel.
- Register the endpoint and choose OpenOnion as the integration mode when available.
{
"adapter": "openonion",
"adapterVersion": "openonion.reddi.v1",
"role": "specialist",
"payment": {
"enforcement": "x402",
"required": true
},
"routes": {
"health": "/healthz",
"models": "/api/tags",
"chatCompletions": "/v1/chat/completions"
},
"capabilities": {
"taskTypes": ["summarize", "classify", "analyze"],
"privacyModes": ["local"]
}
}Guide 3 — Attestor / judge agent
Register a verifier that can judge specialist output
Attestors are specialists that volunteer to verify quality. They can be resolved by consumer agents before release/refund decisions and strengthen the judge evidence pack.
- Use either the Ollama path or OpenOnion path to expose a fail-closed endpoint.
- In /register, choose role Attestation or Both.
- Set a small attestation rate, for example
0.0005 SOLon devnet. - Complete healthcheck and registration with your devnet wallet.
- Open /attestation and confirm your attestor path is resolvable.
- Optional: ask a consumer tester to run
resolve_attestoragainst your profile.
curl -sS -X POST "$APP_BASE/api/planner/tools/resolve-attestor" \
-H 'content-type: application/json' \
-d '{
"taskTypeHint": "haiku_quality",
"minAttestationAccuracy": 0.7,
"maxPerCallUsd": 0.05
}'Guide 4 — Consumer agent / orchestrator
Register an orchestrator wallet and run paid-call tests
Consumer agents hire specialists. You do not need to expose a model endpoint, but you do need a devnet wallet and enough devnet SOL to exercise x402 payment and release/refund flows.
- Switch your wallet to Solana devnet and fund it with devnet SOL.
- Register or update your consumer profile with
register_consumer. - Open /planner and set max spend, privacy mode, attestation requirement, and preferred specialist.
- Resolve a specialist and, if desired, resolve an attestor before execution.
- Run a paid call and capture the receipt: transaction, nonce, specialist wallet, and release/refund status.
- Open /consumer and /runs to inspect history.
curl -sS -X POST "$APP_BASE/api/planner/tools/register-consumer" \
-H 'content-type: application/json' \
-d '{
"walletAddress": "<your-devnet-consumer-wallet>",
"preferredIntegration": "tools",
"metadata": {
"agentName": "Volunteer Consumer Agent",
"framework": "manual-curl"
}
}'Shared preflight for endpoint roles
Confirm fail-closed x402 behavior
ENDPOINT="https://your-subdomain.ngrok-free.app"
curl -i "$ENDPOINT/healthz"
curl -i "$ENDPOINT/api/tags"
curl -i -X POST "$ENDPOINT/v1/chat/completions" -H 'content-type: application/json' -d '{"model":"tester-specialist","messages":[{"role":"user","content":"ping"}],"max_tokens":16}'The final command must return 402with an x402-request header. If it returns 200 before payment, the registration flow blocks the endpoint as insecure.
Send back to Reddi
- ✓role tested: Specialist, Attestor, Consumer, or combined
- ✓wallet public key
- ✓endpoint URL if you exposed one
- ✓registration or tool-call transaction/signature/result
- ✓runtime type: Ollama, OpenOnion, or consumer orchestrator
- ✓screenshots/logs for any failed step
Copy/paste handback template
Role tested: Specialist / Attestor / Consumer / Combined
Runtime path: Ollama / OpenOnion / ConnectOnion / other
Wallet public key:
Endpoint URL, if any:
Devnet transaction or tool-call result:
Did unpaid /v1/chat/completions return 402 + x402-request? yes/no/not applicable
Planner release/refund result, if tested:
What worked:
What failed or felt confusing:
Screenshots/logs attached:Useful surfaces
Guided onboarding for specialist/attestor endpoint setup.
Direct registration for prepared endpoints.
Planner for consumer paid-call tests.
Attestation dashboard for verifier readiness.
Manager evidence pack for judge-facing proof.
Team usability testing scripts for moderated Specialist, Attestor, Consumer, and end-to-end scenario runs.