Developers · EVM partner adapter
Ask Abraxas whether one named protocol action may proceed
Abraxas is the private eligibility layer for one named partner protocol action. It is not a wallet, exchange, custodian, token issuer, transaction relay, smart contract, browser wallet, or on-chain identity registry. Allowed is never a transaction approval, signature, gas authorization, transfer, or execution. The partner backend retains its own RPC, signer, contract, gas, transaction construction, and execution.
Architecture
holder -> Abraxas hosted /partner/verify
Abraxas -> signed eligibility receipt
partner server -> GET /api/receipts/{id}/public
partner server -> AbraxasPartnerKit.evaluateFetchedReceipt
EVM adapter -> issue action contract (type, narrow scope, expiry, nonce)
EVM adapter -> preflight enable_protocol_access | enable_member_access | enable_redemption_access
partner backend -> its own RPC, signer, contract, gas, and execution
lifecycle / webhook -> re-fetch public receipt, never grant from the event body
browser <- { allowed, reason, action_binding, expires_at }Policy pack → hosted Partner Flow → minimum approved receipt → EVM preflight for one named action → partner-owned execution. A webhook body is never a grant.
Receipt verification is AbraxasPartnerKit plus GET /api/receipts/{id}/public. This adapter does not implement a second verifier.
Optional EVM wallet-control proves message-signed control for one named action. It is not Solana Wallet Standard, login, KYC, custody, a balance read, or transaction signing. Client wallet fields remain rejected.
Supported actions
- enable_protocol_access in sandbox:protocol_access
- enable_member_access in sandbox:member_access
- enable_redemption_access in sandbox:redemption_access
Arbitrary contract methods, calldata, chain IDs, recipient addresses, token amounts, transaction payloads, and wallet fields are rejected.
What allowed means
The client result is only allowed, reason, action_binding, and expires_at. Allowed means the partner backend may perform its own named action. It is never a transaction approval, signature, gas authorization, transfer, or execution. No specific EVM chain, RPC, wallet, protocol, or Mainnet deployment is live from this adapter.
Privacy contract
- Google sign in creates an Abraxas account. It does not prove age, identity, residency, or eligibility.
- A webhook event is not authorization. Fetch GET /api/receipts/{id}/public and verify the signed receipt on your server before granting access.
- Allowed is never a transaction approval, signature, gas authorization, transfer, or execution. The partner backend retains its own RPC, signer, contract, gas, transaction construction, and execution.
- Partners receive only allow or deny, a safe reason code, action binding, and expiry.
- Browser responses must not include receipts, signatures, claims, PII, wallets, RPC URLs, calldata, or transaction payloads.
Canonical disclosure: Selective disclosure
Server side preflight
import { AbraxasEvmPartnerAdapter } from "@/lib/partner/evm";
const adapter = new AbraxasEvmPartnerAdapter({
partnerId: process.env.ABRAXAS_PARTNER_ID!,
policyId: process.env.ABRAXAS_POLICY_ID!,
policyVersion: 1,
requirePolicyVersion: true,
environment: "sandbox",
});
export async function enableProtocolAccess(receiptId: string) {
const contract = adapter.issueActionContract({
action_type: "enable_protocol_access",
action_scope: "sandbox:protocol_access",
});
if ("ok" in contract && contract.ok === false) {
return { allowed: false, reason: contract.reason };
}
const verified = await adapter.verifySignedReceipt(receiptId);
// Client JSON is allow/deny, reason, action binding, and expiry only.
// Allowed is never a transaction, signature, gas grant, or execution.
const preflight = await adapter.preflight({ result: verified, contract });
if (!preflight.allowed) return preflight;
// PARTNER EXECUTION BELONGS HERE, IN YOUR BACKEND.
// Use your own RPC, signer, contract, gas, and transaction construction.
// Do not send chain IDs, calldata, wallets, or transaction payloads to Abraxas.
return preflight;
}
Studio: Integration Studio · Kit: Partner Integration Kit · Portable contract: Portable action contract · Wallet control: EVM wallet-control binding
Remaining Mainnet requirements
- The partner remains the execution system. Abraxas only answers a preflight for one named protocol action.
- An allowed result is not a transaction approval, signature, gas authorization, transfer, or on-chain execution.
- Production access stays on the reviewed Launchpad upgrade path. No self-serve live keys from this adapter.
- Pin partner_id, policy_id, and policy_version. Fail closed on draft, deprecated, missing, or mismatched versions.
- Issue a server-authoritative action contract (type, narrow scope, expiry, one-time nonce) before each grant.
- Verify the current public receipt on the server. Do not trust callbacks, webhooks, or client flags.
- Consume the durable nonce on the first permitted preflight. Replay the same nonce as deny.
- Return only allow or deny, a safe reason, action binding, and expiry. Never return receipt, RPC, wallet, or transaction material.
- Reject arbitrary contract methods, calldata, chain IDs, recipient addresses, token amounts, transaction payloads, and wallet fields.
- EVM Mainnet stays unavailable until reviewed Production access, a supported action, a current receipt, durable replay, and a partner-owned EVM execution integration exist.
- Do not claim any specific EVM chain, RPC, wallet, protocol, or Mainnet deployment is live.
- Optional EVM wallet-control is an EIP-191 personal_sign proof for one action. It is not login, KYC, custody, a balance read, or transaction approval.