USDA+ Integration · Documentation

USDA+ Integration

USDA+ is a fully-reserved, USD-backed digital dollar issued by member banks. This is the integration platform — the live on-chain contracts on Sepolia, how a bank onboards and mints or redeems, the proposed event & webhook stream, and how A+ maps to the GENIUS Act. Only on-chain mint, burn and transfer are live today; anything marked draft or proposed is a design in progress.

What USDA+ is

Live on Ethereum Sepolia (testnet). Mainnet is not defined yet.

USDA+ is the token of the A+ Protocol — a bank-native, multi-issuer USD stablecoin network. It is an ERC-20 on Ethereum with 6 decimals, and it is a fully-reserved, USD-backed digital dollar.

The core idea: every member bank is its own issuing node. Each bank holds its own mint key and mints or redeems USDA+ against its own reserves, within a bounded, non-refilling (decrementing) mint allowance. A+ never co-signs a mint. Banks keep their own reserve yield.

Who it is for

USDA+ is built for regulated bank partners who want to issue a single, shared, fully-reserved digital dollar while retaining custody, control, and yield. A+ is embedded infrastructure that each bank operates with its own keys and its own compliance stack (e.g. TRM). A+ is not a hosted custodian and does not centralise compliance ingestion. The smart contracts are the source of truth.

How issuance works

  1. Whitelisting. A bank sends the address(es) it wants whitelisted. A+ grants MINT_ROLE + BURN_ROLE and a bounded mint allowance.
  2. Issue. From a whitelisted custody wallet, the bank calls token.mint(dst, amt) up to its allowance. The allowance decrements and does not refill.
  3. Redeem. The holder calls token.approve(...) first, then the bank calls token.burn(src, amt).

Banks call the contracts directly from a whitelisted custody wallet — this is the supported, validated path. See the contracts overview for addresses and ABIs.

What is live vs what is proposed

Only on-chain mint / burn / transfer on Ethereum Sepolia is implemented today. Everything in the "Proposed" column below is a design proposal — it is not built and may change.
What is liveOn-chain mint, burn, and transfer on Ethereum Sepolia (chainId 11155111): APlusToken (USDA+) — ERC-20, 6 dp, ERC20Permit (EIP-2612); APlusAuthority — roles and mint allowances (interact with this proxy); direct contract calls from a whitelisted custody wallet. Lawful-order freeze/seize is designed but not yet on the deployed build.
What is proposedNot built today — design proposals only: integration platform (readable events + signed webhooks + indexer); interoperable multi-bank testnet; proof-of-reserves (no contract, attestation, or reserve query exists); off-chain / fiat-wire layer.
An optional transaction-builder REST API (returns unsigned mint/burn/transfer payloads, Bearer-token auth) is documented under the API Reference tab, but its backend is not production-ready. The supported path is direct contract calls.

Learn more

ArchitectureHow A+ is embedded per-bank, with each issuer holding its own keys and compliance stack.
ContractsAPlusToken and APlusAuthority on Sepolia — addresses, roles, and functions.
Proposed: integration platformThe proposed events model, signed webhooks, and indexer.
Proposed: proof-of-reservesReserve attestation, planned but not yet built.

Architecture

Live on Ethereum Sepolia (testnet). Mainnet is not defined yet.

A+ Protocol is a bank-native, multi-issuer USD stablecoin network. USDA+ is the token: a fully-reserved, USD-backed ERC-20 on Ethereum with 6 decimals. Each member bank is an issuer/node — it holds its own mint key and mints or redeems against its own reserves within a bounded, non-refilling mint allowance. A+ never co-signs mints, and banks keep their own reserve yield.

The system has three layers. Only the first is live today.

1. On-chain protocol (live)

The smart contracts are the source of truth. Two contracts run on Ethereum Sepolia (chainId 11155111):

ContractAddressRole
APlusToken (USDA+)0xE3C5b3f2d3191d4393Edf2e05D1B31FdC712D69cThe ERC-20 token. mint, burn, decimals() = 6, ERC20Permit (EIP-2612).
APlusAuthority0xfdb312c5bfe7069bd72CB4CAEaC018c8AB2FD6bdUUPS-upgradeable proxy. Governs roles and allowances — interact with this for governance.

Governance is multi-role, so no single key can issue at will:

Owner — cold multisigUpgrades the proxy and rotates the manager. Highest authority, rarely used.
Manager — warm multisigAdds/removes minters and burners, sets mint allowances, and pauses/unpauses.
Minter / Burner — the banksThe issuing banks. Each holds its own key and acts only within its granted allowance.
A+ never co-signsA+ grants roles and allowances; it does not sign any bank's mint or burn.

A bank's mint allowance is bounded and decrementing — each mint draws it down and it does not refill on its own. The manager must explicitly increaseMintAllowance (or setMintAllowance) to extend a bank's capacity. The manager can also pause and unpause the token, freezing transfers when needed.

Banks call the contracts directly from a whitelisted custody wallet. This is the supported, validated path. See Contracts overview for the full function reference.

2. Bank-operated integration

A+ is embedded infrastructure that each bank runs with its own keys. It is not a hosted custodian and does not centralise compliance.

This framing is real today: an issuing bank using a whitelisted address calls token.mint(dst, amt) to issue and token.burn(src, amt) (after token.approve of the burner) to redeem, entirely under its own keys.

3. Integration platform (proposed)

Proposed — not yet built. The integration platform below is a design proposal. Today, the only implemented functionality is on-chain mint / burn / transfer on Sepolia.

A separate integration platform is proposed to give banks a read-and-notify layer on top of the contracts. As designed, it would provide:

Each event would carry an id (also the idempotency key), type, org_id (null = broadcast), chain_tx, block_number, status, payload, and created_at.

See the proposed events model and the event JSON Schema for the full design.

Where to go next

Contracts overviewThe live token and authority contracts, with every function and role.
Proposed eventsThe proposed events, webhooks, and indexer — design under review.

Contracts on Sepolia live

Live on Ethereum Sepolia (testnet). Mainnet is not defined yet.

USDA+ runs as two contracts: a token that mints and burns the dollar, and an authority that decides who is allowed to do so and how much. As a partner-bank engineer you call both — the token for mint/burn, and the authority for the roles and allowances that gate them.

Deployed addresses

Both contracts are live on Ethereum Sepolia (chainId 11155111).

ContractAddressCall it for
APlusToken (USDA+)0xE3C5b3f2d3191d4393Edf2e05D1B31FdC712D69cmint, burn, approve, permit, balances
APlusAuthority (UUPS proxy)0xfdb312c5bfe7069bd72CB4CAEaC018c8AB2FD6bdroles, allowances, pause
Interact with the authority proxy address for roles and allowances, and the token address for mint and burn. The authority is an upgradeable proxy — always use the proxy address above, never an implementation address.

APlusToken (USDA+)

An ERC-20 dollar with 6 decimals, so 1 USDA+ is 1_000_000 base units.

FunctionSignatureDescription
mintmint(address dst, uint256 amt)Issues amt base units to dst. The caller must hold MINT_ROLE and have enough remaining mint allowance — the token checks this with the authority's authorizeMint.
burnburn(address src, uint256 amt)Redeems amt base units from src. The holder src must first approve the burner for at least amt; the caller must hold BURN_ROLE. The token checks this with the authority's authorizeBurn.
decimalsdecimals() → 6USDA+ uses 6 decimals, matching common USD stablecoin conventions.
permitERC20Permit (EIP-2612)Gasless approvals via a signed permit, so an allowance can be set without a separate on-chain approve.
Transfers to the token contract itself are blocked. Sending USDA+ to 0xE3C5b3f2d3191d4393Edf2e05D1B31FdC712D69c will revert. To redeem, use burn (approve-first), not a transfer.

APlusAuthority

The authority is the policy layer. The token defers every privileged action to it, and it is where A+ grants a bank its role and its bounded mint allowance.

Privilege tiers

OwnerCold multisig. Controls upgrades and rotates the manager.
ManagerWarm multisig. Grants/revokes roles, sets allowances, and pauses.
Minter + BurnerThe issuing banks. Each holds its own keys and mints/redeems within its allowance.
FreezerCompliance role for lawful-order freeze / seize — designed, not yet on the deployed build; contracts need updating to add it.

A+ never co-signs mints: once a bank holds MINT_ROLE, BURN_ROLE, and an allowance, it mints and redeems directly from its own whitelisted custody wallet against its own reserves.

Contracts need fixing to be compliant. GENIUS § 4(a)(6)(B) requires lawful-order freeze / seize — a freezer role (freeze / unfreeze / isFrozen enforced in the token's transfer hook, seizure via burn). It is designed but not on the deployed build: the live contracts are the unfreezeable version and must be updated and redeployed.
Source: the Solidity for these contracts lives in the contracts repo on the new-deployment branch (deployed commit dbddd96) — not yet merged to main, which still holds a template. DEPLOYMENT.md on that branch maps this source to the addresses above.

Next steps

OnboardingGet whitelisted, receive your role and allowance, then run mint and burn on Sepolia.
API referenceProposed transaction-builder API for unsigned mint/burn/transfer payloads. Its backend is not production-ready — direct contract calls are the validated path today.

Onboarding

How onboarding works

A partner bank moves through a staged journey, advancing one stage at a time. Each stage runs two parallel tracks — a commercial / compliance track (legal, due diligence, regulatory) and a technical track (integration on testnet) — and an exit gate sits between every stage. A bank does not advance until the gate for its current stage is cleared on both tracks, so commercial and technical work proceed together but go-live is never reached until everything upstream is signed off.

StageWhat happensOwnerExit gate
1. Intro & mutual NDA First contact and scoping. A mutual non-disclosure agreement is executed so both sides can share confidential material. A+ partnerships; bank's legal Mutual NDA signed by both parties.
2. Alignment & non-binding LOI Senior-management alignment on shared goals (capturing reserve yield, interoperable stablecoins). A non-binding Letter of Intent is signed, including the IP / no-joint-development confirmation: participation grants no IP or ownership rights, and there is no JV. A+ leadership; bank's senior management & legal LOI executed; IP / no-JV terms acknowledged; senior-management goals aligned.
3. Due diligence The bank completes the questionnaires below — vendor DDQ, cyber / InfoSec DDQ, compliance & regulatory attestations (applicable frameworks, licenses, service providers, internal controls), and a reserve & treasury management review (treasury capability, with attention to US Treasury Bills for non-US institutions). A+ compliance; bank's compliance, InfoSec & treasury All questionnaires returned and reviewed; no open compliance blockers.
4. Technical onboarding on testnet Crypto-asset infrastructure integration on the Sepolia testnet. The bank sends wallet address(es) to whitelist; A+ grants MINT_ROLE + BURN_ROLE and a bounded, non-refilling mint allowance on APlusAuthority. The bank mints and burns, then registers a webhook endpoint and verifies the X-USDAPlus-Signature HMAC-SHA256. A+ engineering; bank's engineering Whitelist + roles + allowance live; successful mint/burn on Sepolia; webhook registered and HMAC verified.
5. Integration testing & sign-off End-to-end run on the interoperable multi-bank testnet, including a full user-flow simulation, with both sides validating behavior against expectations. A+ engineering; bank's engineering & compliance End-to-end flows pass on the interoperable testnet; written technical sign-off.
6. Go-live readiness (mainnet) Promotion to mainnet / production. Gated on closing the GENIUS items: deployed lawful-order freeze / seize and proof-of-reserves, plus the bank's own licensing and attestations being in place. A+ engineering & compliance; bank's compliance & engineering Freeze / seize deployed; proof-of-reserves in place; bank licensing / attestation confirmed.
7. Ongoing Live operations: monitoring, monthly attestations, and ongoing support. A+ operations & compliance; bank's compliance & engineering Continuous — monthly attestations current; monitoring healthy.

What is live vs proposed. On-chain mint / burn / transfer on the Sepolia testnet is live today — the technical onboarding in stages 4 and 5 reflects the validated flow. The events / webhooks platform, per-bank-employee SSO, and any in-portal automation of this onboarding are proposed, not yet shipped.

Mainnet / production go-live is gated on the GENIUS items: a deployed lawful-order freeze / seize capability (the live contracts still need fixing for § 4(a)(6)(B)) and proof-of-reserves. No partner bank reaches stage 6 until those are closed.

Due-diligence questionnaires

Completed in stage 3. Each is a starting template — your compliance, security and treasury teams complete them and A+ reviews. Click to expand.

Vendor & corporate due diligence

Completed during step 3 of A+'s 8-step banking-partner onboarding to establish who you are as a legal and commercial counterparty before any non-binding LOI.

#QuestionWhat we are looking for
1What is your full legal entity name, registration number, entity type, and jurisdiction(s) of incorporation and operation?A precise legal identity that matches official registries, plus the home regulator's jurisdiction so we can map applicable frameworks.
2Describe your group structure, parent/subsidiary relationships, and any holding companies above the contracting entity.A clear org chart showing where the contracting entity sits and whether obligations flow to a parent or affiliate.
3Who are your ultimate beneficial owners (25%+) and persons exercising ownership or control? Provide names and ownership percentages.Identifiable UBOs supporting KYC/AML screening, with no opaque nominee or shell layers obscuring control.
4List all regulatory licenses, charters, and authorizations you hold, with issuing authority and license numbers.Current, verifiable licenses (e.g. banking charter, money-transmitter, e-money, custody) covering the activities you intend to perform.
5How many years have you been operating, and what is your size by headcount, total assets, and customers served?A track record and scale sufficient to operate as a stablecoin minting/redeeming partner.
6Summarize your financial soundness: most recent audited financials, capital adequacy, and external credit ratings if any.Audited statements and capital/liquidity metrics evidencing the institution can meet redemption and operational obligations.
7Describe your existing digital-asset, stablecoin, or custody activities, including any tokens issued or assets held on-chain.Relevant operational experience and the maturity of controls around digital-asset handling and custody.
8Identify the key third-party service providers you rely on (core banking, custody, cloud, KYC/AML, wallet infrastructure).A vendor map exposing critical dependencies and concentration risk in the providers behind your operations.
9Disclose any pending or past litigation, enforcement actions, regulatory findings, or material fines in the last five years.Full disclosure of legal and regulatory history, with context and remediation for any material matters.
10What insurance coverage do you maintain (professional indemnity, crime/fidelity, cyber, custody) and at what limits?Adequate coverage and limits proportionate to the scale of assets and activity contemplated under the partnership.
11Provide your primary commercial contact: name, title, email, and phone.A named business owner empowered to progress the LOI and commercial terms.
12Provide your primary technical contact for integration: name, title, email, and phone.A named engineering owner who will run the Sepolia testnet integration and webhook setup.
Cybersecurity & InfoSec due diligence

Complete this questionnaire as part of step 3 (compliance documentation) of the A+ banking-partner onboarding. Answers feed the regulatory-compliance review (step 6) and the crypto-asset infrastructure integration (step 8).

#QuestionWhat we are looking for
1Which security certifications and independent audits does your organization hold (for example SOC 2 Type II, ISO 27001, ISO 27017/27018, PCI DSS)? Please attach the most recent reports or bridge letters.A current SOC 2 Type II report covering a full audit period and/or a valid ISO 27001 certificate, with scope that includes the systems used for this integration. Bridge letters acceptable where the audit window has lapsed.
2Describe your key-management and signing infrastructure. Are signing keys held in an HSM (FIPS 140-2/3 Level 3+) or under MPC/threshold custody? Who controls the keys?Hardware-backed or MPC key custody with documented key generation, rotation, and destruction procedures. No single individual able to unilaterally sign. Clear ownership of root and operational keys.
3For the on-chain integration specifically, who holds the keys authorized to call token.mint(dst, amt) and token.burn(src, amt)? How are MINT_ROLE and BURN_ROLE protected?The mint/burn signing keys held under HSM or MPC custody with quorum approval, not on a single hot key. Note: A+ grants a bounded, non-refilling allowance on APlusAuthority; describe how access to those keys is restricted and monitored on your side.
4Which wallet and custody provider(s) do you use for hot, warm, and cold wallets? Are they self-hosted or third-party, and what assurances (audits, insurance) cover them?Named, reputable custody/wallet providers with their own SOC 2 / equivalent attestations, defined hot/cold segregation, and stated insurance coverage. Testnet wallets used during the Sepolia flow may use placeholder addresses such as 0xYourWhitelistedAddress.
5Describe your access-control model and segregation of duties. How do you enforce least privilege, MFA, and separation between development, approval, and production operations?Role-based access control, enforced MFA, least-privilege grants, and documented segregation so that no one person can both initiate and approve a privileged action (including minting). Periodic access reviews.
6What is your change-management process for code, smart contracts, and infrastructure? How are changes reviewed, tested, and approved before production?Formal change management with peer review, separate test/staging environments, approval gates, and audit trails. For smart-contract changes, evidence of code review and third-party audit prior to deployment.
7How often do you conduct penetration testing and vulnerability scanning, and who performs it? What is your remediation SLA by severity?At least annual third-party penetration testing plus regular internal/automated vulnerability scanning, with defined remediation SLAs (e.g. critical within days). Smart-contract audits by a recognized firm for any on-chain components.
8Describe your incident-response plan and breach-notification commitments. What are your notification timelines to partners and regulators?A documented, tested IR plan with defined roles, escalation paths, and contractual breach-notification timelines (e.g. notification within 72 hours or sooner). Evidence of tabletop exercises.
9What are your business-continuity and disaster-recovery arrangements? Provide your RTO and RPO and the date of your last DR test.Documented BCP/DR with stated RTO/RPO targets, geographically redundant infrastructure, tested backups, and a recent (within 12 months) DR exercise.
10Describe your logging and monitoring. How do you capture, retain, and alert on security and on-chain events, including mint/burn activity and webhook delivery?Centralized logging with tamper-evident retention, SIEM-based alerting, and 24/7 monitoring. Ability to monitor on-chain mint/burn/transfer activity and to verify the X-USDAPlus-Signature HMAC-SHA256 on webhook callbacks.
11How do you manage vendor and supply-chain security, including third-party and open-source dependencies? Do you maintain an SBOM and assess critical vendors?A vendor-risk program with onboarding due diligence, periodic reassessment of critical vendors, dependency scanning, and an SBOM for production software. Sub-processors disclosed.
12How do you protect data at rest and in transit, and how is encryption keyed and managed? What data classification and retention controls apply?Strong encryption in transit (TLS 1.2+) and at rest (AES-256 or equivalent), documented key management, a data-classification scheme, and retention/deletion policies aligned to applicable regulation.
13How are administrative and remote access to production secured? Do you use bastion hosts, just-in-time access, hardware security keys, and session recording?Hardened, audited privileged access: JIT elevation, phishing-resistant MFA (e.g. FIDO2 hardware keys), bastion/jump hosts or zero-trust access, and recorded privileged sessions.
14What is your security-awareness and personnel-screening program? Do you conduct background checks and recurring security training for staff with access to keys or customer data?Pre-employment background screening where lawful, role-based onboarding, and at least annual security-awareness training plus targeted training for privileged and key-holding personnel.
Status: On-chain mint / burn / transfer on Sepolia is live. The events/webhooks platform, per-bank-employee SSO, and in-portal onboarding automation are proposed. Mainnet / production go-live is gated on closing the GENIUS gaps: deployed lawful-order freeze/seize (the live contracts need fixing for § 4(a)(6)(B)) and proof-of-reserves.

Compliance and regulatory DDQ

This questionnaire maps to step 6 (regulatory-compliance review) of the A+ banking-partner onboarding framework. It pairs with the vendor and cyber/InfoSec DDQs gathered in step 3.

Compliance runs bank-side. A+ does not centralise compliance. Each partner bank operates its own AML/BSA program, sanctions screening, transaction monitoring, and lawful-order handling. A+ provides the on-chain minting and redemption rails and the controls described in the technical onboarding; your institution remains the regulated party responsible for the program described below.

Compliance & regulatory

Complete the table below; attach supporting policies, attestations, and your most recent independent reviews where indicated.

#QuestionWhat we are looking for
1Are you (or do you intend to become) a permitted-payment-stablecoin issuer under the GENIUS Act, and which path are you pursuing (e.g. insured-depository-institution subsidiary, OCC-approved federal qualified nonbank issuer, or state-qualified issuer)?A clear issuer classification and the specific statutory path, with current status and expected timeline to authorisation.
2Which regulator(s) supervise your stablecoin activity, and what licenses, charters, or money-transmission registrations do you hold?Named primary federal and/or state regulator(s) plus a list of active licenses with jurisdictions, license numbers, and renewal dates.
3Describe your AML/BSA program and identify your designated BSA/AML compliance officer.A board-approved, risk-based program covering the four/five pillars, plus the named officer, their reporting line, and evidence of independent oversight.
4What KYC/CDD controls do you apply at customer onboarding, including beneficial-ownership and enhanced due diligence for higher-risk customers?Documented identity-verification, CDD, and EDD procedures, including beneficial-ownership collection thresholds and customer risk-rating methodology.
5What sanctions screening tooling and process do you use (e.g. TRM Labs, Chainalysis, or equivalent), and how do you screen both customers and on-chain counterparties/wallet addresses?Named blockchain-analytics and list-screening vendors, screening frequency, list coverage (OFAC SDN and others), and how alerts are triaged and escalated.
6How do you perform transaction monitoring across fiat and on-chain activity, and how are SARs/STRs filed?Description of monitoring rules/typologies, on-chain tracing capability, alert-to-case workflow, and SAR/STR governance and filing record.
7How do you handle lawful orders, including freeze and seize requests, and who operates that capability?A documented process for receiving and validating lawful orders and a named team that executes freeze/seize, consistent with GENIUS § 4(a)(6)(B). On-chain enforcement integrates with A+ controls and is operated bank-side.
8Do you have travel-rule capability for covered transfers, and which solution or protocol do you use?Confirmation of travel-rule coverage, the threshold applied, the messaging solution/protocol in use, and how originator/beneficiary data is exchanged and stored.
9Which jurisdictions do you serve, and which jurisdictions are prohibited or restricted?An explicit list of served jurisdictions and a prohibited/restricted list, with the geofencing and customer-screening controls that enforce it.
10What is your audit history for the AML/BSA and sanctions programs (internal audit, independent testing, and any regulatory examinations)?Dates and scope of the last independent test and any regulatory exams, summary of findings, and remediation status for open items.
11How do you manage compliance for third parties and outsourced service providers in scope for stablecoin activity?A vendor/third-party risk-management process covering due diligence, ongoing monitoring, and contractual compliance obligations for in-scope providers.
12What ongoing compliance reporting and record-keeping do you maintain, including the recordkeeping period and management/board reporting cadence?Defined record-retention periods, the metrics reported to senior management and the board, and the cadence of that reporting.
Production go-live is gated on closing the GENIUS gaps, including deployed lawful-order freeze/seize (the live contracts need fixing for § 4(a)(6)(B)) and proof-of-reserves. On-chain mint, burn, and transfer are live on the Sepolia testnet; the events/webhooks platform, per-bank-employee SSO, and in-portal onboarding automation are proposed.
Reserve & treasury management

Step 7 of A+ onboarding: reserve composition, custody, segregation, attestation, and how reserve sufficiency bounds your mint allowance.

#QuestionWhat we are looking for
1 What is the composition of your reserve assets backing minted tokens? Reserves held only in GENIUS-eligible high-quality liquid assets (HQLA): cash, short-dated US Treasury bills, overnight repos collateralized by US Treasuries, and government money market funds. A breakdown by instrument and maturity, with no commingled commercial paper, corporate debt, or non-permitted assets.
2 Who custodies the reserve assets, and under what arrangement? Named custodian(s) (qualified custodian / regulated trust bank), account structure, and jurisdiction. Confirmation that reserves are held in trust or fiduciary accounts identified as backing the tokens, not on the issuer's general balance sheet.
3 How are reserves segregated, and are they bankruptcy-remote from the operating entity? Reserves legally segregated from corporate/operating funds and structured to be bankruptcy-remote, so holders retain a claim on the reserve pool ahead of general creditors in an insolvency. Supporting legal opinion or trust documentation.
4 Can you attest that reserve assets are not rehypothecated, lent, pledged, or reused? A signed no-rehypothecation attestation: reserve assets are not lent, pledged as collateral, used in repo as the borrower, or otherwise reused, except as expressly permitted under GENIUS for the listed HQLA categories.
5 How frequently do you reconcile 1:1 backing between tokens in circulation and reserve assets? A defined reconciliation cadence (at minimum daily) comparing on-chain circulating supply to reserve market value, with a documented exception and remediation process when backing falls below 1:1.
6 Who performs the monthly reserve attestation, and what is its scope? Monthly attestation by an independent registered public accounting firm covering reserve composition, market value, and 1:1 backing. Confirmation the report is published and the engagement letter / scope is available for review.
7 Describe your redemption operations and committed timing. The redemption process, eligible redeemers, cut-off times, and committed settlement window (e.g., same-day or T+1). On the testnet this maps to the bank calling token.burn(src, amt) after token.approve; redemption must draw from segregated reserves, not operating liquidity.
8 If you are a non-US institution, what is your treasury capability for holding US Treasury bills? For non-US institutions: the account, custody, and settlement path used to hold US Treasury bills directly or via a US custodian/correspondent, including FX and operational controls. Demonstrated ability to source, hold, and roll T-bills as GENIUS-eligible reserves.
9 How does reserve sufficiency bound your minting allowance? Confirmation that minting is capped by verified reserves: A+ grants a bounded, non-refilling mint allowance on APlusAuthority sized to deposited/attested reserves, and the bank mints with token.mint(dst, amt) only up to that allowance. Reserves must be in place before the corresponding tokens are minted.
10 What controls govern changes to reserve composition and the mint allowance over time? Governance for reserve changes (approvals, limits, monitoring) and the process for requesting an allowance increase, including the proof-of-reserves evidence A+ requires before raising it. Note: production go-live is gated on closing the GENIUS gaps — deployed lawful-order freeze/seize and proof-of-reserves.
Status: On-chain mint / burn / transfer on Sepolia is live using placeholder whitelisted addresses (e.g. 0xYourWhitelistedAddress). Proof-of-reserves automation and mainnet / production go-live are proposed and gated on closing the GENIUS gaps.

Technical due diligence

This section captures the technical readiness checks for integrating with USDAPlus. On-chain mint / burn / transfer on the Sepolia testnet are live today; the events/webhooks delivery platform is proposed. Mainnet / production go-live is gated on closing the GENIUS gaps (deployed lawful-order freeze/seize and proof-of-reserves).

Scope. Complete the readiness checks below against the Sepolia testnet flow. Use placeholder wallet addresses (e.g. 0xYourWhitelistedAddress) until your custody setup is finalized.
Technical readiness

One row per check — fill in the detail column with your environment specifics or a placeholder where not yet finalized.

#CheckDetail
1Custody / wallet provider and signing setupName your custody or wallet provider (e.g. HSM, MPC, hardware wallet) and how transactions are authorized internally. Confirm who holds signing authority.
2Whitelisted address(es) the bank will useProvide the wallet address(es) for A+ to whitelist for MINT_ROLE + BURN_ROLE on APlusAuthority. Placeholder: 0xYourWhitelistedAddress.
3Constructing and signing mint transactionsDescribe how you build and sign token.mint(dst, amt) up to your bounded, non-refilling allowance. Live on Sepolia.
4Constructing and signing burn (redeem) transactionsDescribe how you call token.approve(...) then token.burn(src, amt) to redeem. Live on Sepolia.
5Broadcasting transactionsConfirm how signed transactions are broadcast (self-hosted node, provider relay) and how you confirm inclusion and handle re-broadcast / nonce management.
6RPC / node access for SepoliaIdentify your Sepolia RPC endpoint or node provider, expected throughput, and fallback endpoint for resilience.
7Webhook receiver endpoint (HTTPS)Provide a publicly reachable HTTPS endpoint to receive event callbacks. Proposed platform — endpoint should be ready for testnet validation.
8Signature verification (HMAC-SHA256)Confirm you can verify the X-USDAPlus-Signature HMAC-SHA256 header using a constant-time comparison against the raw request body.
9Idempotency handling on event idConfirm you de-duplicate on the event id so redelivered events are processed at most once (idempotent persistence keyed on event id).
10Monitoring / alerting for delivery failuresDescribe how you detect and alert on webhook delivery failures, retries, and processing errors (dashboards, on-call paging).
11Environments (testnet now, mainnet later)Confirm separation of testnet and future mainnet configuration (keys, endpoints, secrets) and your promotion path. Mainnet is gated on the GENIUS gaps.
12Key rotationDescribe your rotation policy and procedure for signing keys and the webhook signing secret, including rollover without downtime.
13Named technical contact + escalationProvide a named technical contact (engineering owner) and an escalation path / out-of-hours contact for integration incidents.

Readable events and webhooks draft

Proposed — not yet built. Only the on-chain mint / burn / transfer functionality, live on Ethereum Sepolia, is implemented today. Everything on this page is a design proposal for review and may change.

The A+ integration platform at integration.usdaplus.com is proposed. It would turn on-chain activity into readable events and relay them to each member bank as signed webhooks, so your systems never have to poll the chain directly. The smart contracts on Sepolia remain the source of truth; events are a convenience layer that would mirror them.

Event envelope

Every event would share one envelope. The full contract is the JSON Schema.

FieldTypeDescription
idstringUnique event id, and the idempotency key. Treat repeated ids as the same event.
typestringOne of mint, redeem, por_update, feed_reading.
org_idstring | nullIssuer org the event belongs to. null = broadcast to all subscribers (e.g. a network-wide figure).
chain_txstring | nullSource transaction hash, when the event derives from a transaction.
block_numberinteger | nullBlock the source transaction was included in.
statusstringpending until the source block reaches finality, then finalized. Act on finalized.
payloadobjectType-specific body (see below).
created_atintegerUnix milliseconds the platform recorded the event.

Event types

mintWould fire when a whitelisted issuer calls token.mint(dst, amt). Carries minter, to, amount, and the issuer's remaining (decrementing) allowance_remaining.
redeemWould fire when an issuer calls token.burn(src, amt) after approval. Carries burner, from, and amount.
por_updateA proposed proof-of-reserve snapshot: total_supply, total_reserves, reserve_ratio, as_of. No PoR source exists today — this is a design target.
feed_readingA proposed generic oracle reading (e.g. a reserve ratio or rate) published between por_update snapshots.

Payload types

Each type selects a payload shape. The mint and redeem payloads mirror live on-chain activity; por_update and feed_reading are proposed and have no data source today.

TypeStatusRequired fieldsNotes
mintMirrors live mintissuer_org_id, minter, to, amountOptional allowance_remaining (decrementing, non-refilling mint allowance after this mint).
redeemMirrors live burnissuer_org_id, burner, from, amountfrom is the holder whose tokens were burned; the source must have approved the burner.
por_updateProposedtotal_supply, total_reserves, reserve_ratio, as_ofOptional issuer_org_id (null = network-wide) and attestation. reserve_ratio = reserves / supply; >= 1.0 is fully reserved.
feed_readingProposedfeed, value, as_ofOptional unit (ratio, bps, percent, USD) and source. A generic oracle/feed reading between snapshots.

Money fields (amount, total_supply, etc.) use an object of amount (decimal string in major units; USDA+ has 6 dp), currency (USD or USDA+), and optional base_units. Amounts are strings, not numbers, to avoid float rounding.

Lifecycle

An indexer would write each event as pending when it first observes the transaction, then a finality sweep would flip it to finalized once the block reaches the required confirmations.

  1. Observed. Indexer records the event as status: pending.
  2. Finalized. Finality sweep updates the event to status: finalized and delivers the webhook.

Webhook delivery

Delivery would be an HTTPS POST to your registered per-bank subscription URL. Each request would carry the header X-USDAPlus-Signature, a lowercase-hex HMAC-SHA256 over the raw request body, keyed with your per-bank secret. Verify it in constant time before trusting the payload.

X-USDAPlus-Signature: <lowercase-hex HMAC-SHA256(rawBody, perBankSecret)>
import { createHmac, timingSafeEqual } from "node:crypto";

// rawBody MUST be the exact bytes received, not a re-serialized object.
export function verify(rawBody: Buffer, header: string, secret: string): boolean {
  const expected = createHmac("sha256", secret).update(rawBody).digest("hex");
  const a = Buffer.from(expected, "utf8");
  const b = Buffer.from(header, "utf8");
  return a.length === b.length && timingSafeEqual(a, b);
}
Sign over the raw bytes. Re-serializing the JSON before hashing would change the signature and fail verification.

Proposed endpoints

MethodPathPurpose
GET/api/v1/eventsList events (with /api/v1/events/:id for one).
GET POST/api/v1/subscriptionsList or register your subscription URL.
POST/api/v1/deliveries/:id/replayRe-send a delivery (use the id for idempotency).
POST/api/v1/hooks/chainInternal indexer ingest hook.

Example event

A mint, finalized. Addresses below are placeholders.

{
  "schema_version": "0.1.0-proposed",
  "id": "evt_01J9Z3K8Q1ABCDEF2GHJK",
  "type": "mint",
  "status": "finalized",
  "org_id": "org_example_bank",
  "network": "eth-sepolia",
  "chain_id": 11155111,
  "chain_tx": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
  "block_number": 6543210,
  "confirmations": 12,
  "occurred_at": 1781990400000,
  "created_at": 1781990460000,
  "payload": {
    "issuer_org_id": "org_example_bank",
    "minter": "0xYourWhitelistedAddress",
    "to": "0xYourWhitelistedAddress",
    "amount": { "amount": "100.000000", "currency": "USDA+", "base_units": "100000000" },
    "allowance_remaining": { "amount": "900.000000", "currency": "USDA+", "base_units": "900000000" }
  }
}

A+ is embedded infrastructure: each bank operates its own keys and its own compliance stack. This event layer is proposed to be read-only and would never co-sign or gate your mints. See the full JSON Schema for every field and payload shape.

Interoperable multi-bank testnet proposed

Proposed — not yet built. Only the on-chain mint / burn / transfer functionality, live on Ethereum Sepolia, is implemented today. Everything on this page is a design proposal for review and may change.

This page describes a proposed interoperable multi-bank testnet: a shared exercise on Ethereum Sepolia (chainId 11155111) where several issuing banks would each operate against the same USDA+ deployment to demonstrate interoperability and proof-of-reserves logic end to end. Nothing here is built yet.

What it would demonstrate

The testnet would run against the existing Sepolia contracts — no new deployment. Each participant would be whitelisted independently:

Because A+ never co-signs mints, each issuing bank would mint and redeem against its own reserves and allowance, while the shared token contract remains the single source of truth.

Proposed interoperability flows

With several issuers active, the exercise is proposed to show:

Independent issuanceEach bank would call token.mint(dst, amt) up to its own allowance to issue USDA+, and token.burn(src, amt) (after token.approve) to redeem.
Cross-bank transfersBanks would transfer USDA+ to one another using standard ERC-20 transfers — one fungible token, regardless of which issuer minted it.
USDA+ has 6 decimals. Transfers to the token contract itself are blocked. These are the same on-chain rules that apply on Sepolia today.

Shared event feed and dashboard

A shared, read-only feed is proposed so every participant could observe network activity — not just its own. It would build on the proposed events model: events of type mint, redeem, por_update, and feed_reading, each carrying chain_tx, block_number, and a status of pending until finalized.

{
  "type": "mint",
  "org_id": null,
  "chain_tx": "0x…",
  "block_number": 1234567,
  "status": "pending",
  "payload": { "dst": "0xYourWhitelistedAddress", "amount": "1000000000" }
}

A broadcast event (org_id: null) would be visible to all participants on the shared dashboard, while bank-scoped events would be filtered per subscriber.

Proposed user-flow simulation

To let a bank verify behaviour end to end without writing client code, the testnet is proposed to include clickable interfaces — simple simulated issue / redeem / transfer flows. Each action would trigger the corresponding on-chain transaction and surface the resulting system logs so engineers can confirm what happened.

  1. Trigger an action. A participant clicks "issue", "redeem", or "transfer" in the simulation UI.
  2. On-chain settlement. The action would submit the matching mint, burn, or transfer transaction from the whitelisted wallet on Sepolia.
  3. Verify via logs and feed. The emitted event would appear in the shared feed (pending → finalized), letting the bank verify allowance decrements, balances, and cross-bank effects.

Demonstrating proof-of-reserves across issuers

A core goal is to demonstrate proof-of-reserves logic spanning multiple issuers — each bank attesting against its own reserves while the network reconciles a shared view. This depends entirely on the proposed proof-of-reserves design.

There is no proof-of-reserve contract, attestation, or reserve query deployed anywhere today. The por_update event type is a proposed scaffold only.

Where this fits

A+ is embedded infrastructure: each bank operates with its own keys and its own compliance stack. The testnet would not centralise custody or compliance — it would simply give participants a shared, observable environment to validate interoperability.

Proof-of-reservesThe reserves logic this testnet would exercise.
EventsThe proposed feed powering the shared dashboard.

Proof of reserves proposed

Proposed — not yet built. Only the on-chain mint / burn / transfer functionality, live on Ethereum Sepolia, is implemented today. Everything on this page is a design proposal for review and may change.

What exists today

Nothing. There is no proof-of-reserve contract, no attestation mechanism, and no reserve query anywhere in the A+ Protocol stack. You cannot ask the network whether USDA+ is fully reserved, and the smart contracts do not track reserves at all.

Reserve sufficiency is currently the issuing bank's off-chain responsibility. Each member bank mints and redeems USDA+ against its own reserves within a bounded, non-refilling mint allowance, and is solely accountable for holding adequate USD backing. A+ never co-signs mints and does not custody, measure, or verify any bank's reserves.

The rest of this page describes a design we are proposing for review.

Proposed design

We propose two complementary attestation scopes:

Per-issuer attestationEach issuing bank would attest to the reserves backing the USDA+ it has minted, scoped to its issuer_org_id.
Network-wide attestationA broadcast figure aggregating reserves across all issuers, delivered to every subscriber (org_id = null).

The por_update event

Attestations would be surfaced through the proposed por_update event relayed by the integration platform. The payload is defined in /schemas/events.schema.json and would carry:

FieldTypeDescription
total_supplyMoneyTotal USDA+ in circulation for the attested scope (per-issuer or network-wide).
total_reservesMoneyUSD reserves backing that supply, as attested.
reserve_rationumbertotal_reserves / total_supply. A value >= 1.0 would indicate full reservation.
as_ofintegerUnix milliseconds the reserves were measured.
attestation.sourcestringWhere the figure came from — issuer-self-report, third-party-auditor, or onchain-por-feed.
{
  "type": "por_update",
  "org_id": null,
  "payload": {
    "issuer_org_id": null,
    "total_supply": { "amount": "1000000.000000", "currency": "USDA+" },
    "total_reserves": { "amount": "1002300.00", "currency": "USD" },
    "reserve_ratio": 1.0023,
    "as_of": 1781990400000,
    "attestation": {
      "source": "third-party-auditor",
      "url": "https://example.com/attestation/2026-06"
    }
  }
}
A network-wide attestation would set org_id to null (broadcast to all subscribers) and issuer_org_id to null. A per-issuer attestation would set both to that bank's org id.

Maturity path for the attestation source

We propose the attestation.source field would evolve as trust assumptions tighten:

  1. Issuer self-report. Each bank publishes its own reserve figure (issuer-self-report). Lowest assurance; fastest to ship.
  2. Third-party auditor. An independent auditor signs the attestation (third-party-auditor), with a url or ref to the report.
  3. On-chain PoR feed. Reserves are published to an on-chain feed (onchain-por-feed) the network can read directly, removing the off-chain trust gap.

Tie-in to the bounded mint allowance

Today an issuer's mint allowance is set manually by the A+ manager. We propose that, in a mature design, an issuer's allowance could be bounded by its attested reserves — the allowance the manager grants (or that increaseMintAllowance permits) would not exceed the bank's most recent attested total_reserves. This would enforce full reservation at the protocol edge: a bank could never mint beyond what it has attested to holding.

Open questions

Related

EventsThe proposed por_update event and delivery model.
Events schemaThe full JSON Schema, including PorUpdatePayload.

Off-chain and fiat-wire layer proposed

Proposed — not yet built. Only the on-chain mint / burn / transfer functionality, live on Ethereum Sepolia, is implemented today. Everything on this page is a design proposal for review and may change.

The gap a bank partner raised

A+ today is purely on-chain. A whitelisted custody wallet calls token.mint(dst, amt) to issue and token.burn(src, amt) to redeem, bounded by a non-refilling mint allowance. The smart contracts are the source of truth, and that is the full extent of what runs today.

A bank partner noted that this leaves no link between the fiat side and the chain side. When a customer sends a USD wire to fund issuance, nothing in the system acknowledges that wire or ties it to a specific mint. The decision "this wire arrived, so this bank may now mint up to this amount" is made entirely outside A+, by hand.

A+ is embedded infrastructure, not a hosted custodian. Any layer proposed here would run inside each bank's own environment, against the bank's own keys and reserves.

What is proposed

An off-chain layer that would sit between a bank's fiat rails and its on-chain mint key. It is a design proposal with no implementation.

  1. Wire received. The bank's fiat system would record an incoming USD wire (amount, reference, settlement time) into the off-chain layer.
  2. Mapped to a mint authorisation. The layer would map that wire to a bounded mint authorisation: wire received → mint up to that amount. It would not co-sign or execute the mint — it would only express the ceiling the bank is now entitled to issue against its own reserves.
  3. Mint executed on-chain, unchanged. The bank would still call token.mint(dst, amt) directly from its whitelisted wallet, within its existing allowance. The on-chain path would not change.
  4. Fiat instruction logged off-chain. The fiat instruction would be logged off-chain for the bank's reporting and compliance records, giving an auditable trail from wire to mint.

Compliance stays bank-side

This layer is proposed to be reconciliation and reporting only. It would not centralise compliance.

A+ does not centralise compliance ingestion and is not a custodian. The fiat-wire layer is proposed to reflect a bank's fiat activity for its own records — it would never act as a gate that A+ operates on a bank's behalf.

How it would relate to events

If built, fiat-wire acknowledgements would be a natural producer of off-chain context that pairs with the on-chain mint and redeem events in the proposed events model. A wire acknowledgement would precede the on-chain mint it authorises, so a consumer could correlate a fiat instruction with the resulting mint event by amount and reference.

No event type for fiat wires is defined today. The current proposed event types are mint, redeem, por_update, and feed_reading.

Status

Implemented todayOn-chain mint / burn / transfer on Ethereum Sepolia, called directly from a whitelisted wallet.
Proposed (this page)The off-chain / fiat-wire layer. Design only — no code, no endpoints, no timeline.

GENIUS Act compliance

Not legal advice — and a work in progress. The GENIUS Act is law (2025), but its implementing rules (the FinCEN / OFAC AML and sanctions program for permitted payment stablecoin issuers) are still in proposed rulemaking as of April 2026. This page maps A+'s architecture to the Act's requirements as engineering documentation. It is not a legal opinion, not a representation of compliance, and is subject to counsel review and the final rules.

The GENIUS Act (Guiding and Establishing National Innovation for U.S. Stablecoins Act) is the first U.S. federal framework for payment stablecoins. Crucially, it regulates the issuer, not the infrastructure.

In A+, the issuer is each member bank — a permitted payment stablecoin issuer (PPSI). A+ is the shared infrastructure those banks operate. So GENIUS compliance is a split responsibility: the bank carries the issuer obligations (reserves, AML, audits, redemption), and A+ provides the on-chain primitives and controls that let those obligations be enforced and evidenced.

Status legend. Satisfied — the on-chain capability exists today on Ethereum Sepolia (mint / burn / transfer). In development — designed, not yet deployed. Proposed — design only. Only on-chain mint / burn / transfer exist on-chain today; everything else is in development or proposed and may change.

Requirement-by-requirement

GENIUS requirementHow A+ addresses itStatus
Permitted issuer — only PPSIs (bank / IDI subsidiaries, licensed nonbanks) may issueMulti-issuer model: each issuer is a regulated bank that holds MINT_ROLE / BURN_ROLE. A+ is infrastructure and never issues or co-signs.Satisfied
1:1 reserves in HQLA (T-bills, demand deposits, repos, MMFs), bankruptcy-remote, no rehypothecationEach bank backs the USDA+ it mints with its own reserves and holds them itself; A+ never custodies, pledges, or reuses reserves. Mint is capped by a bounded, non-refilling allowance. Reserve holding is off-chain and a proposed part of the program.In development
No interest / yield to holdersUSDA+ is a plain ERC-20 with no rebase or holder-interest mechanism; banks keep their own reserve yield rather than paying it to token holders.Satisfied
Redemption at parOn-chain burn(src, amt) redeems USDA+ 1:1 against the bank's reserves.Satisfied
Monthly reserve attestation + public disclosure of reserve composition and outstanding supplyProposed proof-of-reserves: a por_update event carrying total_supply, total_reserves, reserve_ratio, and an attestation source (self-report → third-party auditor → on-chain feed). Not yet built.Proposed
AML / BSA program + sanctions screening (issuer is a "financial institution")Each bank runs its own AML / sanctions stack in its own environment. A+ deliberately does not centralise compliance ingestion. This integration is off-chain and in development.In development
Transaction blocking + lawful-order freeze / seize / burn (§ 4(a)(6)(B))A freezer compliance role (modeled on USDC's blacklister): freeze / unfreeze / isFrozen enforced in the token's transfer hook, seizure via burn. Designed, but not on the deployed build.Contracts need fixing
Emergency controlspause / unpause on APlusAuthority halts mint / burn authorization network-wide.Satisfied
Key governance appropriate to a regulated issuerPrivilege tiers: Owner (cold multisig), Manager (warm multisig), Minter / Burner (the banks), and the Freezer (compliance, pending deployment).Satisfied

A+'s public positioning cites § 4 & § 5 for the overall regulatory setup (AML/BSA integration, reserve management, smart-contract compliance primitives) and § 4(a)(6)(B) for the freeze requirement.

Open compliance gaps

Two requirements are not yet met and must close before production / mainnet issuance: (1) lawful-order freeze / seize (§ 4(a)(6)(B)) — the contracts need fixing, since the deployed build is unfreezeable, so the freezer design must be added and redeployed; and (2) proof-of-reserves — monthly attestation is required, but reserve sufficiency is asserted off-chain today with no on-chain evidence.

What the issuing bank still owns

A+ cannot make a bank compliant; it can only give the bank the rails. Under GENIUS the bank remains responsible for:

Sources