Neues Kapital autorisieren, begrenzt auf den exakt erlaubten Betrag.
Die überprüfbare Vorhandels-Autorisierungsschicht für autonomes Kapital
Sie haben bereits einen Trading-Agenten?
Ergänzen Sie Profit Engine Governor.
Verwahrung behalten. Kontrolle behalten.
PE Governor prüft jede eingereichte Orderabsicht gegen Ihre Regeln, koordiniert die Portfoliokapazität über Agenten hinweg und gibt eine kurzlebige signierte Autorisierung über den exakt erlaubten Betrag zurück. Ihr Executor verifiziert sie; PE Governor übernimmt nie die Verwahrung und platziert nie die Order.
PE Governor von Solarly.
Entscheidungsurteile
Eine bestehende verwaltete Position verkleinern. Den zurückgegebenen Betrag nie überschreiten.
Eine harte Regel ist verletzt. Diesen Kandidaten nicht erneut ausführen.
Temporäre Blockade oder in diesem Zyklus nicht ausgewählt. Abwarten und erneut anfragen.
Eine deterministische Entscheidung, live gerendert
Diese Karte stammt aus derselben reinen Policy, die der bezahlte Endpunkt ausführt, auf Basis der Beispielanfrage unten. Gleiche Eingabe ergibt immer denselben Entscheidungs-Hash.
Erlaubter Betrag
25.000,00 $
ausgewählt: cand_spot_btc_01
- cand_spot_btc_01Rang 1ALLOCATE
- cand_eq_msft_02Rang 2HOLD
- Anfrage-Hash
- request a2a7c6d765b6ef70214374eef0f1ad0fc4276c754b69030219ecdad05ab6e468
- Entscheidungs-Hash
- decision 855dec83616b3c4363d24707604abf566e092ca8f4e67f7d5bff77007729bd68
Risikoprüfungen (beobachtet vs. Limit)
- portfolio_state_fresh15 / 120PASS
- portfolio_state_not_future0 / 5PASS
- reconciliation_currenttrue / truePASS
- kill_switch_clearfalse / falsePASS
- daily_loss_budget400 / 5000PASS
- max_drawdown1.8 / 8PASS
So funktioniert es
1. Vorschlagen
Ihre Agenten senden bis zu 50 Kandidaten auf einen gemeinsamen Bus: Lane, Asset, Richtung, angefragtes Nominal, vom Aufrufer geliefertem Maximalverlust und erwarteter Nettokante, Evidenzstatus und Ablauf.
2. Steuern
PE Governor wendet eine einzige reine Policy an: Aktualität des Zustands, Abstimmung, Not-Aus, Evidenz, Verlustbudgets, Reserve, Nominalgrenzen und Parallelität — dann Ranking und höchstens ein Gewinner.
3. Befolgen
Kapital bewegt sich zu Ihren Bedingungen. Gleiche Anfrage rein, bytegleiche Entscheidung raus, mit SHA-256-Hashes der kanonischen Anfrage und Entscheidung für die Prüfung.
Grundlegende Kontrolle für autonomes Kapital
Eine deterministische Autorisierungsschicht, die Agentenentscheidungen begrenzt, prüfbar und über Ihren gesamten Ausführungs-Stack hinweg portabel macht.
Manipulationssichere Policy-Belege
Jede Antwort verbindet kanonische Anfrage und Entscheidung mit SHA-256-Hashes, Policy-Version, Zeitstempel, exakt erlaubtem Betrag und Prüfungen von Istwert gegen Limit. Wiederholungen bleiben bytegleich.
Portfolioweite Governance
Bewerten Sie bis zu 50 Kandidaten aus mehreren Strategien gegen einen aktuellen, abgestimmten Portfolio-Snapshot. Regeln zu Verlust, Drawdown, Reserve, Nominale, Parallelität und Not-Aus greifen, bevor höchstens ein Gewinner ausgewählt wird.
Maschinennative Bezahlung
Zahlen Sie den veröffentlichten, risikogestaffelten Preis pro Entscheidung in USDC auf Base über den Coinbase Business Checkout oder nutzen Sie Prepaid-Guthaben. Idempotenz verhindert doppelte logische Käufe.
Die Durchsetzung beginnt in Ihrem Ausführungsadapter
PE Governor liefert die Autorisierung; Ihr Adapter prüft sie und hält sich daran, bevor eine Order platziert wird. Coinbase setzt PE-Entscheidungen derzeit nicht am Handelsplatz durch, und die Zahlung ändert das Urteil nie.
Install-Policy lesenSignierte Autorisierungen, die Ihr Executor prüfen kann
Jede gesteuerte Allokation trägt eine kurzlebige, kryptografisch signierte Autorisierung, die an ihre exakte Absicht und den zuletzt übermittelten Risikozustand des Portfolios gebunden ist.
Überprüfbare Policy-Nachweise
Die Signatur deckt die kanonische Nachweis-Nutzlast ab: Aussteller, Schlüssel-ID, Verdikt, exakt erlaubter Betrag, Kandidat, Strategie, Lane, vollständiger Geltungsbereich, Request-Hash, Entscheidungs-Hash, Portfolio-Zustands-Hash, das dauerhafte Preisangebot und der Ablauf. Den öffentlichen Schlüssel einmal laden und offline prüfen.
Atomare Reservierungen über Agenten hinweg
Gleichzeitige Agenten in Mandant und Portfolio konkurrieren um ein einziges aggregiertes Risikobuch. Ein Gewinnerkandidat wird nur ausführbar, wenn die Reservierung gewährt wird; sonst wird das Verdikt zu HOLD herabgestuft.
Risikogestaffelte Preise
Der Preis einer Entscheidung skaliert mit dem Risikokapital — dem größten angefragten Nominal oder Maximalverlust der Anfrage. Das Angebot ist deterministisch und hash-gebunden. Zahlung kauft die Prüfung, nie ein Verdikt.
Deterministischer Preis pro Entscheidung
Risikokapital ist max(requestedNotionalUsd, maximumLossUsd) über alle eingereichten Kandidaten. Eine Krediteinheit entspricht 0,05 USDC.
| Risikokapital | Preis (USDC auf Base) | Krediteinheiten |
|---|---|---|
| bis 1.000 $ | 0.05 USDC | 1 |
| bis 10.000 $ | 0.10 USDC | 2 |
| bis 100.000 $ | 1.00 USDC | 20 |
| bis 500.000 $ | 5.00 USDC | 100 |
| über 500.000 $ | 10.00 USDC | 200 |
Derselbe Preis gilt für ALLOCATE, REDUCE, REJECT und HOLD. Es gibt kein Abonnement.
Vor der Ausführung prüfen
Ihr Ausführungsadapter muss Nutzlast-Hash, Signatur, Aussteller und Schlüssel-ID, Gültigkeitsfenster, aktives Reservierungs-Token, alle erwarteten Hashes sowie die exakte Übereinstimmung von Order, autorisierter Absicht und Betrag prüfen. Verbrauchen Sie jede Autorisierung genau einmal in einem dauerhaften Speicher und weisen Sie jede Order ohne gültige Autorisierung ab.
import { verifyAuthorizationForOrder } from "./pe-authorization";
// 1. Fetch and cache the published Ed25519 verification key (kid + issuer).
const { issuer, keys } = await (await fetch("/api/pe/v1/keys")).json();
// 2. Gate every order on a live, exactly matching authorization.
const check = await verifyAuthorizationForOrder({
proof: decision.proof, // returned with every 200
publicKeyBase64Url: keys[0].x,
order: {
candidateId, strategyId, assetId, lane, side, reduceOnly,
amountUsd: decision.allocationAmountUsd, // must equal permittedAmountUsd exactly
tenantId, portfolioId, agentId, ownerId, accountScope,
},
expected: {
issuer,
keyId: keys[0].kid,
policyVersion: decision.policyVersion,
requestHash: decision.audit.requestHash,
decisionHash: decision.audit.decisionHash,
portfolioStateHash: decision.proof.payload.portfolioStateHash,
quoteHash: decision.priceQuote.quoteHash,
reservationFencingToken: decision.proof.payload.reservation.fencingToken,
},
// Durable single-use store: ONE atomic operation, never has() then add().
replayStore: {
consumeIfUnused: async (id) => {
const { rowCount } = await db.query(
"INSERT INTO used_authorizations (id) VALUES ($1) ON CONFLICT DO NOTHING",
[id],
);
return rowCount === 1; // false => already consumed
},
},
});
if (!check.valid) throw new Error(check.reason); // never place the order
placeOrder(decision.allocationAmountUsd);Portfoliokapazität über das gesamte Ausführungsfenster halten
OptionalEine signierte Autorisierung offline zu prüfen genügt weiterhin für sich allein. Wer mehr will, beansprucht sie: PE Governor hält dann den Anteil dieser Autorisierung an der Gesamtkapazität, bis Ihr Adapter das Ergebnis meldet — so kann ein zweiter Agent denselben Spielraum nicht doppelt verbrauchen.
AUTHORIZED
Mit der Entscheidung ausgestellt und hält bereits Kapazität für ihr kurzes Gültigkeitsfenster.
CLAIMED
Ihr Adapter hat einen geheimen Claim-Key gebunden und verantwortet nun das Ergebnis. Kein anderer Aufrufer kann den Zustand ändern.
COMMITTED
Der Adapter hat gehandelt. Die Kapazität bleibt gehalten, denn gebundenes Kapital arbeitet bis zur Abstimmung.
RELEASED
Der Adapter hat ohne Handlung abgebrochen. Die Kapazität wird sofort zurückgegeben.
EXPIRED
Niemand hat rechtzeitig zurückgemeldet. Die Kapazität wird von selbst zurückgegeben, ganz ohne Aufräumaufruf.
// Optional. Offline verification of the proof is still sufficient.
const { authorizationId } = decision.lifecycle;
const claimKey = crypto.randomUUID() + crypto.randomUUID(); // >= 32 chars, keep it
const claim = await fetch(`/api/pe/v1/authorizations/${authorizationId}/claim`, {
method: "POST",
headers: { "x-pe-claim-key": claimKey },
});
if (!claim.ok) return; // someone else owns this authorization
try {
await placeOrderWithYourOwnExecutor(intent); // PE Governor never does this
await fetch(`/api/pe/v1/authorizations/${authorizationId}/commit`, {
method: "POST",
headers: { "x-pe-claim-key": claimKey },
});
} catch {
// stand down and give the capacity straight back
await fetch(`/api/pe/v1/authorizations/${authorizationId}/release`, {
method: "POST",
headers: { "x-pe-claim-key": claimKey },
});
}Der Lebenszyklus-Zustand ist die Buchführung Ihrer eigenen Richtlinie. Ein Commit hält fest, dass Ihr Adapter gehandelt hat; PE Governor platziert, leitet und settelt nach wie vor keine Order.
Die Policy einmal installieren
Rufen Sie den Endpunkt vor jeder Allokation ab dem Eigentümer-Schwellenwert auf. Bei REJECT oder HOLD stoppen und einen REDUCE-Betrag nie überschreiten.
# Install once, obey always.
BEFORE any allocation >= OWNER_THRESHOLD_USD:
decision = POST /api/pe/v1/governor # same-origin; production clients resolve it against https://governor.solarly.ai
if decision.decision in ("REJECT", "HOLD"):
stop() # no order, no retry loop
if decision.decision == "REDUCE":
size = min(intended_size, decision.allocationAmountUsd)
if decision.decision == "ALLOCATE":
size = decision.allocationAmountUsd # never more
execute(size) # execution is 100% yoursAnfrage- und Antwort-Payloads
{
"schema": "pe-governor-request.v1",
"requestedAt": "2026-08-11T22:30:00.000Z",
"ownerId": "owner_demo",
"portfolio": {
"asOf": "2026-08-11T22:29:45.000Z",
"reconciliationCurrent": true,
"killSwitchEngaged": false,
"equityUsd": 250000,
"cashAvailableUsd": 90000,
"grossNotionalUsd": 120000,
"dailyNotionalUsedUsd": 30000,
"realizedLossTodayUsd": 400,
"drawdownPct": 1.8,
"openPositions": [
{
"assetId": "ETH-USD",
"lane": "SPOT",
"notionalUsd": 20000,
"managed": true
}
]
},
"constraints": {
"capitalReserveUsd": 25000,
"installThresholdUsd": 1000,
"maxCandidateNotionalUsd": 25000,
"maxPositionNotionalUsd": 40000,
"maxPortfolioNotionalUsd": 200000,
"maxDailyNotionalUsd": 75000,
"remainingLossBudgetUsd": 3000,
"maxDailyLossUsd": 5000,
"maxDrawdownPct": 8,
"maxConcurrentPositions": 12,
"maxConcurrentPositionsPerLane": 6,
"maxPortfolioStalenessSeconds": 120,
"minimumEdgeBpsByLane": {
"EQUITIES": 25,
"SPOT": 30,
"FUTURES": 40
}
},
"candidates": [
{
"candidateId": "cand_spot_btc_01",
"sourceLane": "SPOT",
"strategyId": "carry_basis_v3",
"assetId": "BTC-USD",
"side": "BUY",
"reduceOnly": false,
"requestedNotionalUsd": 30000,
"maximumLossUsd": 1200,
"expectedNetEdgeBps": 85,
"evidenceStatus": "READY",
"createdAt": "2026-08-11T22:28:00.000Z",
"expiresAt": "2026-08-11T22:40:00.000Z",
"metadata": {
"venue": "primary",
"confidence": 0.71
}
},
{
"candidateId": "cand_eq_msft_02",
"sourceLane": "EQUITIES",
"strategyId": "gap_fade_v2",
"assetId": "MSFT",
"side": "BUY",
"reduceOnly": false,
"requestedNotionalUsd": 12000,
"maximumLossUsd": 900,
"expectedNetEdgeBps": 40,
"evidenceStatus": "READY",
"createdAt": "2026-08-11T22:27:10.000Z",
"expiresAt": "2026-08-11T22:45:00.000Z"
}
]
}{
"schema": "pe-governor-decision.v1",
"policyVersion": "pe-governor-policy-1.0.0",
"generatedAt": "2026-08-11T22:30:00.000Z",
"decision": "ALLOCATE",
"selectedCandidateId": "cand_spot_btc_01",
"allocationAmountUsd": 25000,
"reasons": [
"ALLOCATION_PERMITTED"
],
"portfolioChecks": [
{
"check": "portfolio_state_fresh",
"status": "PASS",
"observed": 15,
"limit": 120
},
{
"check": "portfolio_state_not_future",
"status": "PASS",
"observed": 0,
"limit": 5
},
{
"check": "reconciliation_current",
"status": "PASS",
"observed": true,
"limit": true
},
{
"check": "kill_switch_clear",
"status": "PASS",
"observed": false,
"limit": false
},
{
"check": "daily_loss_budget",
"status": "PASS",
"observed": 400,
"limit": 5000
},
{
"check": "max_drawdown",
"status": "PASS",
"observed": 1.8,
"limit": 8
}
],
"candidates": [
{
"candidateId": "cand_spot_btc_01",
"decision": "ALLOCATE",
"allocationAmountUsd": 25000,
"rank": 1,
"expectedAfterCostProfitUsd": 212.5,
"reasons": [
"SIZE_CONSTRAINED_BY_LIMITS",
"ALLOCATION_ELIGIBLE"
],
"riskChecks": [
{
"check": "evidence_ready",
"status": "PASS",
"observed": "READY",
"limit": "READY"
},
{
"check": "candidate_unexpired",
"status": "PASS",
"observed": "2026-08-11T22:40:00.000Z",
"limit": "2026-08-11T22:30:00.000Z"
},
{
"check": "maximum_loss_bounded",
"status": "PASS",
"observed": 1200,
"limit": 30000
},
{
"check": "remaining_loss_budget",
"status": "PASS",
"observed": 1200,
"limit": 3000
},
{
"check": "install_threshold",
"status": "PASS",
"observed": 30000,
"limit": 1000
},
{
"check": "lane_minimum_edge_bps",
"status": "PASS",
"observed": 85,
"limit": 30
},
{
"check": "capital_reserve",
"status": "PASS",
"observed": 65000,
"limit": 0
},
{
"check": "max_candidate_notional",
"status": "BLOCKED",
"observed": 30000,
"limit": 25000
},
{
"check": "max_position_notional",
"status": "PASS",
"observed": 40000,
"limit": 40000
},
{
"check": "max_portfolio_notional",
"status": "PASS",
"observed": 80000,
"limit": 200000
},
{
"check": "max_daily_notional",
"status": "PASS",
"observed": 45000,
"limit": 75000
},
{
"check": "lane_concurrency",
"status": "PASS",
"observed": 1,
"limit": 6
},
{
"check": "portfolio_concurrency",
"status": "PASS",
"observed": 1,
"limit": 12
},
{
"check": "permitted_size_usd",
"status": "PASS",
"observed": 25000,
"limit": 30000
}
]
},
{
"candidateId": "cand_eq_msft_02",
"decision": "HOLD",
"allocationAmountUsd": 0,
"rank": 2,
"expectedAfterCostProfitUsd": 48,
"reasons": [
"ALLOCATION_ELIGIBLE",
"NOT_SELECTED_THIS_CYCLE"
],
"riskChecks": [
{
"check": "evidence_ready",
"status": "PASS",
"observed": "READY",
"limit": "READY"
},
{
"check": "candidate_unexpired",
"status": "PASS",
"observed": "2026-08-11T22:45:00.000Z",
"limit": "2026-08-11T22:30:00.000Z"
},
{
"check": "maximum_loss_bounded",
"status": "PASS",
"observed": 900,
"limit": 12000
},
{
"check": "remaining_loss_budget",
"status": "PASS",
"observed": 900,
"limit": 3000
},
{
"check": "install_threshold",
"status": "PASS",
"observed": 12000,
"limit": 1000
},
{
"check": "lane_minimum_edge_bps",
"status": "PASS",
"observed": 40,
"limit": 25
},
{
"check": "capital_reserve",
"status": "PASS",
"observed": 65000,
"limit": 0
},
{
"check": "max_candidate_notional",
"status": "PASS",
"observed": 12000,
"limit": 25000
},
{
"check": "max_position_notional",
"status": "PASS",
"observed": 40000,
"limit": 40000
},
{
"check": "max_portfolio_notional",
"status": "PASS",
"observed": 80000,
"limit": 200000
},
{
"check": "max_daily_notional",
"status": "PASS",
"observed": 45000,
"limit": 75000
},
{
"check": "lane_concurrency",
"status": "PASS",
"observed": 0,
"limit": 6
},
{
"check": "portfolio_concurrency",
"status": "PASS",
"observed": 1,
"limit": 12
},
{
"check": "permitted_size_usd",
"status": "PASS",
"observed": 12000,
"limit": 12000
}
]
}
],
"execution": {
"performed": false,
"custody": false,
"brokerage": false,
"orderPlacement": false,
"walletControl": false,
"note": "PE Governor returns a decision only. It never executes trades, holds custody, controls wallets, or places orders."
},
"alpha": {
"independentReturnForecast": false,
"proprietaryAlphaClaim": false,
"expectedEdgeSource": "caller_supplied",
"maximumLossSource": "caller_supplied"
},
"audit": {
"engine": "pe-governor",
"deterministic": true,
"llmUsed": false,
"policyVersion": "pe-governor-policy-1.0.0",
"requestHash": "a2a7c6d765b6ef70214374eef0f1ad0fc4276c754b69030219ecdad05ab6e468",
"generatedAt": "2026-08-11T22:30:00.000Z",
"decisionHash": "855dec83616b3c4363d24707604abf566e092ca8f4e67f7d5bff77007729bd68"
}
}Zahlung und Abwicklung
Zahlen Sie pro Entscheidung in USDC auf Base über einen Coinbase-Business-Checkout oder nutzen Sie vorausbezahlte Credits. Kein Abo. Autorisierung ist keine Abwicklung: erst ein COMPLETED-Checkout gibt die Entscheidung frei.
- Step 01
POST + Idempotenzschlüssel
Eine logische Anfrage wird atomar reserviert.
- Step 02
402 mit x402-URL
Genau ein Coinbase-Checkout wird erzeugt.
- Step 03
202 während der Verarbeitung
Mit gleichem Schlüssel und Checkout-Id erneut versuchen.
- Step 04
COMPLETED
Polling bestätigt einen COMPLETED-Checkout. Die Bestätigung per signiertem Webhook ist verfügbar, sobald sie konfiguriert ist.
- Step 05
200 Entscheidung
Einmal gespeichert; Wiederholungen sind bytegleich.
Die Statuscode-Zustandsmaschine
POST /api/pe/v1/governor (X-Idempotency-Key: uuid-v4)
|
v
402 Payment Required --payment.x402Url--> client pays the checkout
| |
|<---- retry: same key + X-Checkout-Id ------+
v
202 Accepted checkout ACTIVE / PROCESSING --> back off, retry
|
v
checkout COMPLETED (polling; signed webhook when configured)
|
v
200 OK pe-governor-decision.v1, stored once, replays byte-identicalWiederholungsschleife im Client
Eine minimale Integration. Sende einen UUID-v4-Idempotenzschlüssel, lies x402-URL und Checkout-ID aus dem 402-Body, bezahle sie und frage dann mit demselben Schlüssel und derselben Checkout-ID ab, bis die Entscheidung freigegeben wird.
import { randomUUID } from "node:crypto";
const ENDPOINT = "/api/pe/v1/governor"; // same-origin; resolves against https://governor.solarly.ai
const idempotencyKey = randomUUID(); // UUID v4, one per logical decision
// 1. First call: body + idempotency key. No payment yet, so expect 402.
let res = await fetch(ENDPOINT, {
method: "POST",
headers: { "content-type": "application/json", "x-idempotency-key": idempotencyKey },
body: JSON.stringify(governorRequest),
});
if (res.status !== 402) throw new Error(`unexpected status ${res.status}`);
// 2. Read the x402 URL and checkout id straight off the 402 body.
const { payment } = await res.json();
const x402Url: string = payment.x402Url; // where the client pays
const checkoutId: string = payment.checkoutId; // echo this back on every retry
// 3. Pay with your x402 client. The authorization response is NOT settlement:
// only a COMPLETED checkout releases the decision.
await x402Client.pay(x402Url, { amount: payment.amount, asset: payment.currency });
// 4. Poll the same request with the same key + checkout id, backing off.
for (let attempt = 0; attempt < 12; attempt++) {
res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-idempotency-key": idempotencyKey, "x-checkout-id": checkoutId },
}); // body may be omitted on retries
if (res.status === 200) {
const decision = await res.json(); // pe-governor-decision.v1
console.log(decision.decision, decision.allocationAmountUsd, decision.audit.decisionHash);
break;
}
if (res.status !== 202) throw new Error(await res.text()); // 402/409 are terminal
await new Promise((r) => setTimeout(r, Math.min(500 * 2 ** attempt, 8000)));
}Die Grenze, klar benannt
- 01. Keine Handelsausführung und keine Orderplatzierung
- 02. Keine Verwahrung, keine Wallets, keine privaten Schlüssel
- 03. Kein Brokerage und keine Geldübermittlung
- 04. Kein LLM im Entscheidungspfad
- 05. Keine eigene Renditeprognose und kein Anspruch auf proprietäres Alpha
- 06. Erwartete Kante und Maximalverlust sind stets Eingaben des Aufrufers
- 07. Keine handelsplatzseitige Durchsetzung wird behauptet; Ihr Adapter setzt jede Autorisierung durch
- 08. Eine signierte Autorisierung belegt, welche Policy-Entscheidung ausgestellt wurde. Sie ist kein Compliance-Zertifikat, keine Underwriting-Entscheidung, keine On-Chain-Attestierung und keine Handelsplatz-Freigabe.