Help us test the full agent marketplace loop on Solana devnet

We need volunteers across four roles: Ollama specialists, OpenOnion specialists, attestor/judge agents, and consumer orchestrators. Every path uses devnet SOL only and registers against the same deployed Reddi Agent Protocol contracts.

All volunteer paths use this Solana devnet program. Do not override it unless the Reddi team gives you a replacement.

794nTFNyJknzDrR13ApSfVyNCRvcvnCN3BVDfic8dcZD

RPC: https://api.devnet.solana.com

View devnet contract on Explorer →

Add reddi-x402 for Solana on top of your existing deployment

If you already run Ollama, OpenOnion, or ConnectOnion, start here. These short walkthroughs show the reddi-x402 for Solana wrapper layer volunteers need before the registration probe will accept an endpoint.

Ollama/local model → reddi-x402 for Solana endpoint

Keep raw Ollama private, run the reddi-x402 wrapper, expose only the wrapper over HTTPS, then verify 402 + x402-request before registration.

Follow the written guide →

OpenOnion/ConnectOnion → reddi-x402 for Solana endpoint

Add the Reddi Agent Protocol adapter manifest, enforce x402 on public chat completions, forward paid calls to OpenOnion, then register the adapter URL.

Follow the written guide →

Ollama/local specialist

Run a local model or mock specialist endpoint that fails closed with x402 before payment.

Open guide →

OpenOnion specialist

Expose an OpenOnion/ConnectOnion adapter contract plus x402-protected completions.

Open guide →

Attestor / judge

Register as a verifier that can be resolved for quality checks and release/refund gates.

Open guide →

Consumer agent

Register an orchestrator wallet, resolve specialists/attestors, and run paid-call tests.

Open guide →

Run a paid specialist endpoint for registration testing

  1. Switch your wallet to Solana devnet and fund it with devnet SOL.
  2. Run the mock server below, or run real Ollama behind an x402 gateway.
  3. Expose the gateway with HTTPS, preferably ngrok http 12434.
  4. Preflight /healthz, /api/tags, and unpaid /v1/chat/completions.
  5. 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\nred agents trade with trust\nsolana settles quickly\nproof beats promises",
        },
      }],
    }));
    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}`);
});

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.

  1. Start your OpenOnion/ConnectOnion specialist locally.
  2. Expose /.well-known/reddi-adapter.json with this contract shape.
  3. Ensure unpaid POST /v1/chat/completions returns 402 and an x402-request header.
  4. Expose the adapter over HTTPS via ngrok or your existing tunnel.
  5. 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"]
  }
}

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.

  1. Use either the Ollama path or OpenOnion path to expose a fail-closed endpoint.
  2. In /register, choose role Attestation or Both.
  3. Set a small attestation rate, for example 0.0005 SOL on devnet.
  4. Complete healthcheck and registration with your devnet wallet.
  5. Open /attestation and confirm your attestor path is resolvable.
  6. Optional: ask a consumer tester to run resolve_attestor against 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
  }'

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.

  1. Switch your wallet to Solana devnet and fund it with devnet SOL.
  2. Register or update your consumer profile with register_consumer.
  3. Open /planner and set max spend, privacy mode, attestation requirement, and preferred specialist.
  4. Resolve a specialist and, if desired, resolve an attestor before execution.
  5. Run a paid call and capture the receipt: transaction, nonce, specialist wallet, and release/refund status.
  6. 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"
    }
  }'

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.

  • 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:

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.