Developers · Cross-chain

Cross-chain protocol access

Private proof → fresh consent → audience-bound receipt → server re-check → one-time chain authorization → partner-owned activate_protocol_access. Local/sandbox reference only. A presentation is never sufficient. Abraxas does not transfer tokens, mint, approve spending, route orders, settle payments, or custody funds.

Plain language

private proof → fresh consent → audience-bound receipt → server re-check → one-time chain authorization → partner-owned action

holder (private proof)
        |
        v
Hosted Partner Flow + fresh consent
        |
        v
audience-bound receipt
        |
        v
server GET /api/receipts/{id}/public
        |
        v
one-time chain authorization
        |
        v
activate_protocol_access (partner-owned)

Named action

Both chains use the same named action: activate_protocol_access. A partner protocol records that one subject may access one named feature. It does not transfer tokens, mint assets, approve spending, route orders, settle payments, custody funds, or call arbitrary contracts or programs.

The reference integrations record an expiry-bound entitlement copied from the verified attestation expiresAt. They have no payable fallback, token accounts, token program calls, wallet creation, transaction signing, RPC, or deployment action.

Expiry and revocation

Access is valid_until the verified chain attestation expiresAt. Once the chain clock reaches that instant, hasAccess / assert_protocol_access is inactive. A renewed attestation may extend access only through a new one-time authorization. An older authorization cannot shorten a newer valid entitlement. Callers cannot pass expiry.

Source withdrawal or revocation blocks all future attestations. Partners must honor receipt lifecycle notifications and re-fetch the current public receipt before sensitive actions. The onchain reference entitlement is deliberately short-lived and is not an indefinite KYC/KYB grant. Callers cannot provide, extend, or alter expiry.

EVM interface

Contract AbraxasProtocolAccess, method activateProtocolAccess. It accepts only a valid consumed authorization from AbraxasPartnerEligibilityGate. Local Foundry tests only.

Solana interface

Program abraxas_protocol_access, instruction activate_protocol_access. It consumes only a valid Authorization PDA from abraxas_eligibility_gate. Local ProgramTest only. The reference program id is not a live deployment.

Presentation is not enough

Reference server flows start with an audience-bound Eligibility Presentation request, Hosted Partner Flow, fresh consent, a partner-bound receipt, a mandatory public-receipt re-fetch, and then chain-attestation issuance bound to a verified deployment_ref. Browser input cannot select chain, contract, program, receipt, policy, action, signer, nonce, expiry, or entitlement.

Local commands

# EVM (local Foundry)
cd contracts/evm-eligibility-verifier && forge test --match-contract AbraxasProtocolAccessTest

# Solana (local ProgramTest)
cargo test --manifest-path solana/abraxas-eligibility-gate/Cargo.toml --test protocol_access -- --nocapture

# TypeScript
npx vitest run lib/partner/crossChainProtocolAccess/crossChainProtocolAccess.test.ts

Server example

import { AbraxasPartnerKit } from "@abraxas/partner-kit";
import { issueCrossChainProtocolAccess } from "@abraxas/partner-kit/cross-chain-protocol-access";

const kit = new AbraxasPartnerKit({
  partnerId: process.env.ABRAXAS_PARTNER_ID,
  policyId: process.env.ABRAXAS_POLICY_ID,
  policyVersion: Number(process.env.ABRAXAS_POLICY_VERSION),
  requirePolicyVersion: true,
  environment: "sandbox",
  baseUrl: process.env.ABRAXAS_BASE_URL,
});

export async function activateProtocolAccessOnServer(input) {
  // Browser cannot select chain, contract/program, receipt, policy, action, signer, nonce, expiry, or entitlement.
  return issueCrossChainProtocolAccess({
    kit,
    request_ref: input.request_ref,
    verifier_nonce: input.verifier_nonce,
    network_id: process.env.ABRAXAS_PROTOCOL_NETWORK_ID,
    deployment_ref: process.env.ABRAXAS_VERIFIED_DEPLOYMENT_REF,
    named_action: "activate_protocol_access",
  });
}
Continue from hereIntegration StudioStarter KitLaunchpadPartner Flow docs