A camada verificável de autorização pré-negociação para capital autônomo

Já tem um agente de trading?
Adicione o Profit Engine Governor.
Mantenha a custódia. Mantenha o controle.

O PE Governor avalia cada intenção de ordem enviada segundo as suas regras, coordena a capacidade da carteira entre agentes e devolve uma autorização assinada de curta duração para o valor permitido exato. Seu executor a verifica; o PE Governor nunca assume custódia nem envia a ordem.

PE Governor da Solarly.

Vereditos de decisão

Verdict 01ALLOCATE

Autorize capital novo, limitado ao valor permitido exato.

Verdict 02REDUCE

Reduza uma posição gerenciada existente. Nunca ultrapasse o valor retornado.

Verdict 03REJECT

Uma regra rígida falhou. Não volte a agir sobre este candidato.

Verdict 04HOLD

Bloqueio temporário ou não selecionado neste ciclo. Aguarde e pergunte de novo.

01Uma decisão determinística, renderizada ao vivo

Uma decisão determinística, renderizada ao vivo

Este cartão vem da mesma política pura executada pelo endpoint pago, a partir da requisição de exemplo abaixo. Entrada idêntica sempre gera hash de decisão idêntico.

ALLOCATEpe-governor-policy-1.0.0

Valor permitido

US$ 25.000,00

selecionado: cand_spot_btc_01

  • cand_spot_btc_01posição 1ALLOCATE
  • cand_eq_msft_02posição 2HOLD
Hash da requisição
request a2a7c6d765b6ef70214374eef0f1ad0fc4276c754b69030219ecdad05ab6e468
Hash da decisão
decision 855dec83616b3c4363d24707604abf566e092ca8f4e67f7d5bff77007729bd68

Verificações de risco (observado vs. limite)

  • portfolio_state_fresh15 / 120PASS
  • portfolio_state_not_future0 / 5PASS
  • reconciliation_currenttrue / truePASS
  • kill_switch_clearfalse / falsePASS
  • daily_loss_budget400 / 5000PASS
  • max_drawdown1.8 / 8PASS

Como funciona

Phase 01

1. Propor

Seus agentes emitem até 50 candidatos em um barramento comum: trilha, ativo, lado, nocional solicitado, perda máxima e ganho líquido esperado informados pelo chamador, status de evidência e expiração.

Phase 02

2. Governar

O PE Governor aplica uma única política pura: atualidade do estado, reconciliação, kill switch, evidências, orçamentos de perda, reserva, tetos de nocional e concorrência — depois classifica e escolhe no máximo um vencedor.

Phase 03

3. Obedecer

O capital se move nos seus termos. Mesma requisição na entrada, decisão idêntica byte a byte na saída, com hashes SHA-256 da requisição e da decisão canônicas para auditoria.

02Controle fundamental para capital autônomo

Controle fundamental para capital autônomo

Uma camada de autorização determinística que torna as decisões dos agentes limitadas, auditáveis e portáveis por toda a sua pilha de execução.

Recibos de política à prova de adulteração

Cada resposta vincula a requisição canônica e a decisão com hashes SHA-256, versão da política, carimbo de tempo, valor permitido exato e verificações de observado versus limite. As repetições permanecem idênticas byte a byte.

Governança de todo o portfólio

Avalie até 50 candidatos de várias estratégias contra um único snapshot de portfólio recente e reconciliado. Regras de perda, drawdown, reserva, nocional, concorrência e kill switch se aplicam antes de no máximo um vencedor ser selecionado.

Pagamento nativo para máquinas

Pague o preço publicado por decisão, em faixas de risco em USDC na Base pelo fluxo de checkout da Coinbase Business, ou use créditos pré-pagos. A idempotência evita compras lógicas duplicadas.

A aplicação começa no seu adaptador de execução

O PE Governor devolve a autorização; seu adaptador a verifica e a obedece antes de enviar uma ordem. A Coinbase não aplica atualmente as decisões do PE na corretora, e o pagamento nunca muda o veredito.

Ler a política de instalação
03Autorizações assinadas que seu executor pode verificar

Autorizações assinadas que seu executor pode verificar

Cada alocação governada carrega uma autorização de curta duração, assinada criptograficamente e vinculada à sua intenção exata e ao último estado de risco enviado da carteira.

Provas de política verificáveis

A assinatura cobre a carga canônica da prova: emissor, id da chave, veredito, valor exato permitido, candidato, estratégia, trilha, escopo completo, hash da solicitação, hash da decisão, hash do estado da carteira, a cotação durável e a expiração. Baixe a chave pública uma vez e verifique offline.

Reservas atômicas entre agentes

Agentes concorrentes no mesmo inquilino e carteira disputam um único livro de risco agregado. Um candidato vencedor só se torna executável se a reserva for concedida; caso contrário, o veredito é rebaixado para HOLD.

Preço por faixas de risco

O preço de uma decisão acompanha o capital em risco — o maior nocional solicitado ou perda máxima da solicitação. A cotação é determinística e vinculada ao hash. O pagamento compra a avaliação, nunca um veredito.

Preço determinístico por decisão

Capital em risco é max(requestedNotionalUsd, maximumLossUsd) entre os candidatos enviados. Uma unidade de crédito equivale a 0,05 USDC.

Preço determinístico por decisão
Capital em riscoPreço (USDC na Base)Unidades de crédito
até US$ 1.0000.05 USDC1
até US$ 10.0000.10 USDC2
até US$ 100.0001.00 USDC20
até US$ 500.0005.00 USDC100
acima de US$ 500.00010.00 USDC200

O mesmo preço vale para ALLOCATE, REDUCE, REJECT e HOLD. Não há assinatura.

Verifique antes de executar

Seu adaptador de execução deve verificar o hash da carga, a assinatura, o emissor e o id da chave, a janela de validade, o token de reserva vigente, todos os hashes esperados e se a ordem corresponde exatamente à intenção e ao valor autorizados. Consuma cada autorização uma única vez em um armazenamento durável e recuse qualquer ordem sem autorização vigente.

verify-authorization.ts
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);
Chaves de verificação
04Reserve a capacidade da carteira por toda a janela de execução

Reserve a capacidade da carteira por toda a janela de execução

Opcional

Verificar uma autorização assinada offline continua sendo suficiente por si só. Se quiser mais, reivindique-a: o PE Governor passa a reter a parcela de capacidade agregada daquela autorização até seu adaptador informar o desfecho, de modo que um segundo agente não gaste a mesma folga duas vezes.

  1. AUTHORIZED

    Emitida junto com a decisão e já retendo capacidade durante sua curta janela de validade.

  2. CLAIMED

    Seu adaptador vinculou uma chave de reivindicação secreta e agora responde pelo desfecho. Nenhum outro chamador pode alterá-la.

  3. COMMITTED

    O adaptador agiu. A capacidade segue retida, porque o capital comprometido está em uso até a conciliação.

  4. RELEASED

    O adaptador recuou sem agir. A capacidade volta imediatamente.

  5. EXPIRED

    Ninguém retornou a tempo. A capacidade volta sozinha, sem nenhuma chamada de limpeza.

authorization-lifecycle.ts
// 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 },
  });
}

O estado do ciclo de vida é o registro da sua própria política. Confirmar apenas registra que seu adaptador agiu; o PE Governor continua sem colocar, rotear ou liquidar qualquer ordem.

05Instale a política uma única vez

Instale a política uma única vez

Ligue a chamada antes de qualquer alocação igual ou acima do limite do proprietário. Pare em REJECT ou HOLD e nunca ultrapasse um valor REDUCE.

install-policy.txt
# 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% yours

Payloads de requisição e resposta

06Requisição — pe-governor-request.v1
request.json
{
  "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"
    }
  ]
}
07Resposta — pe-governor-decision.v1
decision.json
{
  "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"
  }
}
08Pagamento e liquidação

Pagamento e liquidação

Pague por decisão em USDC na Base através de um checkout da Coinbase Business, ou consuma créditos pré-pagos. Não há assinatura. Autorização não é liquidação: só um checkout COMPLETED libera a decisão.

  1. Step 01

    POST + chave de idempotência

    Uma requisição lógica é reservada atomicamente.

  2. Step 02

    402 com URL x402

    Exatamente um checkout da Coinbase é criado.

  3. Step 03

    202 durante o processamento

    Tente de novo com a mesma chave e o mesmo id de checkout.

  4. Step 04

    COMPLETED

    O polling confirma um checkout COMPLETED. A confirmação por webhook assinado fica disponível quando configurada.

  5. Step 05

    Decisão 200

    Armazenada uma vez; as repetições são idênticas byte a byte.

A máquina de estados dos códigos HTTP

Laço de repetição do cliente

Uma integração mínima. Envie uma chave de idempotência UUID v4, leia a URL x402 e o id do checkout no corpo do 402, pague e depois consulte com a mesma chave e o mesmo id até a decisão ser liberada.

retry-loop.ts
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)));
}

Guia completo: primeira compra

09O limite, dito com clareza

O limite, dito com clareza

  1. 01. Sem execução de operações e sem envio de ordens
  2. 02. Sem custódia, carteiras ou chaves privadas
  3. 03. Sem corretagem ou transmissão de dinheiro
  4. 04. Nenhum LLM no caminho da decisão
  5. 05. Sem previsão própria de retorno e sem alegação de alfa proprietário
  6. 06. Ganho esperado e perda máxima são sempre entradas fornecidas pelo chamador
  7. 07. Nenhuma imposição nativa na corretora é alegada; seu adaptador aplica cada autorização
  8. 08. Uma autorização assinada comprova qual decisão de política foi emitida. Não é certificado de conformidade, decisão de subscrição, atestação on-chain nem aprovação da corretora.