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.
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.
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.
MINT_ROLE + BURN_ROLE and a bounded mint allowance.token.mint(dst, amt) up to its allowance. The allowance decrements and does not refill.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.
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.APlusToken and APlusAuthority on Sepolia — addresses, roles, and functions.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.
The smart contracts are the source of truth. Two contracts run on Ethereum Sepolia (chainId 11155111):
| Contract | Address | Role |
|---|---|---|
| APlusToken (USDA+) | 0xE3C5b3f2d3191d4393Edf2e05D1B31FdC712D69c | The ERC-20 token. mint, burn, decimals() = 6, ERC20Permit (EIP-2612). |
| APlusAuthority | 0xfdb312c5bfe7069bd72CB4CAEaC018c8AB2FD6bd | UUPS-upgradeable proxy. Governs roles and allowances — interact with this for governance. |
Governance is multi-role, so no single key can issue at will:
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.
A+ is embedded infrastructure that each bank runs with its own keys. It is not a hosted custodian and does not centralise compliance.
MINT_ROLE / BURN_ROLE) and its own reserves.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.
A separate integration platform is proposed to give banks a read-and-notify layer on top of the contracts. As designed, it would provide:
mint, redeem, por_update, feed_reading).POST to each bank's subscription URL, signed with X-USDAPlus-Signature (a lowercase-hex HMAC-SHA256 over the raw body, verified in constant time).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.
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.
Both contracts are live on Ethereum Sepolia (chainId 11155111).
| Contract | Address | Call it for |
|---|---|---|
| APlusToken (USDA+) | 0xE3C5b3f2d3191d4393Edf2e05D1B31FdC712D69c | mint, burn, approve, permit, balances |
| APlusAuthority (UUPS proxy) | 0xfdb312c5bfe7069bd72CB4CAEaC018c8AB2FD6bd | roles, allowances, pause |
An ERC-20 dollar with 6 decimals, so 1 USDA+ is 1_000_000 base units.
| Function | Signature | Description |
|---|---|---|
mint | mint(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. |
burn | burn(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. |
decimals | decimals() → 6 | USDA+ uses 6 decimals, matching common USD stablecoin conventions. |
permit | ERC20Permit (EIP-2612) | Gasless approvals via a signed permit, so an allowance can be set without a separate on-chain approve. |
0xE3C5b3f2d3191d4393Edf2e05D1B31FdC712D69c will revert. To redeem, use burn (approve-first), not a transfer.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.
addMinter / removeMinter, addBurner / removeBurner.setMintAllowance, increaseMintAllowance, decreaseMintAllowance. A mint allowance is bounded and decrements as a bank mints; it does not refill on its own.authorizeMint and authorizeBurn, called by the token to check the caller's role and remaining allowance.setManager, pause, unpause.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.
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.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.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.
| Stage | What happens | Owner | Exit 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.
Completed in stage 3. Each is a starting template — your compliance, security and treasury teams complete them and A+ reviews. Click to expand.
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.
| # | Question | What we are looking for |
|---|---|---|
| 1 | What 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. |
| 2 | Describe 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. |
| 3 | Who 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. |
| 4 | List 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. |
| 5 | How 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. |
| 6 | Summarize 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. |
| 7 | Describe 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. |
| 8 | Identify 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. |
| 9 | Disclose 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. |
| 10 | What 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. |
| 11 | Provide your primary commercial contact: name, title, email, and phone. | A named business owner empowered to progress the LOI and commercial terms. |
| 12 | Provide 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. |
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).
| # | Question | What we are looking for |
|---|---|---|
| 1 | Which 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. |
| 2 | Describe 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. |
| 3 | For 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. |
| 4 | Which 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. |
| 5 | Describe 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. |
| 6 | What 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. |
| 7 | How 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. |
| 8 | Describe 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. |
| 9 | What 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. |
| 10 | Describe 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. |
| 11 | How 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. |
| 12 | How 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. |
| 13 | How 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. |
| 14 | What 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. |
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.
Complete the table below; attach supporting policies, attestations, and your most recent independent reviews where indicated.
| # | Question | What we are looking for |
|---|---|---|
| 1 | Are 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. |
| 2 | Which 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. |
| 3 | Describe 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. |
| 4 | What 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. |
| 5 | What 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. |
| 6 | How 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. |
| 7 | How 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. |
| 8 | Do 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. |
| 9 | Which 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. |
| 10 | What 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. |
| 11 | How 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. |
| 12 | What 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. |
Step 7 of A+ onboarding: reserve composition, custody, segregation, attestation, and how reserve sufficiency bounds your mint allowance.
| # | Question | What 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. |
0xYourWhitelistedAddress). Proof-of-reserves automation and mainnet / production go-live are proposed and gated on closing the GENIUS gaps.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).
0xYourWhitelistedAddress) until your custody setup is finalized.One row per check — fill in the detail column with your environment specifics or a placeholder where not yet finalized.
| # | Check | Detail |
|---|---|---|
| 1 | Custody / wallet provider and signing setup | Name your custody or wallet provider (e.g. HSM, MPC, hardware wallet) and how transactions are authorized internally. Confirm who holds signing authority. |
| 2 | Whitelisted address(es) the bank will use | Provide the wallet address(es) for A+ to whitelist for MINT_ROLE + BURN_ROLE on APlusAuthority. Placeholder: 0xYourWhitelistedAddress. |
| 3 | Constructing and signing mint transactions | Describe how you build and sign token.mint(dst, amt) up to your bounded, non-refilling allowance. Live on Sepolia. |
| 4 | Constructing and signing burn (redeem) transactions | Describe how you call token.approve(...) then token.burn(src, amt) to redeem. Live on Sepolia. |
| 5 | Broadcasting transactions | Confirm how signed transactions are broadcast (self-hosted node, provider relay) and how you confirm inclusion and handle re-broadcast / nonce management. |
| 6 | RPC / node access for Sepolia | Identify your Sepolia RPC endpoint or node provider, expected throughput, and fallback endpoint for resilience. |
| 7 | Webhook receiver endpoint (HTTPS) | Provide a publicly reachable HTTPS endpoint to receive event callbacks. Proposed platform — endpoint should be ready for testnet validation. |
| 8 | Signature verification (HMAC-SHA256) | Confirm you can verify the X-USDAPlus-Signature HMAC-SHA256 header using a constant-time comparison against the raw request body. |
| 9 | Idempotency handling on event id | Confirm you de-duplicate on the event id so redelivered events are processed at most once (idempotent persistence keyed on event id). |
| 10 | Monitoring / alerting for delivery failures | Describe how you detect and alert on webhook delivery failures, retries, and processing errors (dashboards, on-call paging). |
| 11 | Environments (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. |
| 12 | Key rotation | Describe your rotation policy and procedure for signing keys and the webhook signing secret, including rollover without downtime. |
| 13 | Named technical contact + escalation | Provide a named technical contact (engineering owner) and an escalation path / out-of-hours contact for integration incidents. |
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.
Every event would share one envelope. The full contract is the JSON Schema.
| Field | Type | Description |
|---|---|---|
id | string | Unique event id, and the idempotency key. Treat repeated ids as the same event. |
type | string | One of mint, redeem, por_update, feed_reading. |
org_id | string | null | Issuer org the event belongs to. null = broadcast to all subscribers (e.g. a network-wide figure). |
chain_tx | string | null | Source transaction hash, when the event derives from a transaction. |
block_number | integer | null | Block the source transaction was included in. |
status | string | pending until the source block reaches finality, then finalized. Act on finalized. |
payload | object | Type-specific body (see below). |
created_at | integer | Unix milliseconds the platform recorded the event. |
token.mint(dst, amt). Carries minter, to, amount, and the issuer's remaining (decrementing) allowance_remaining.token.burn(src, amt) after approval. Carries burner, from, and amount.total_supply, total_reserves, reserve_ratio, as_of. No PoR source exists today — this is a design target.por_update snapshots.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.
| Type | Status | Required fields | Notes |
|---|---|---|---|
mint | Mirrors live mint | issuer_org_id, minter, to, amount | Optional allowance_remaining (decrementing, non-refilling mint allowance after this mint). |
redeem | Mirrors live burn | issuer_org_id, burner, from, amount | from is the holder whose tokens were burned; the source must have approved the burner. |
por_update | Proposed | total_supply, total_reserves, reserve_ratio, as_of | Optional issuer_org_id (null = network-wide) and attestation. reserve_ratio = reserves / supply; >= 1.0 is fully reserved. |
feed_reading | Proposed | feed, value, as_of | Optional 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.
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.
status: pending.status: finalized and delivers the webhook.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);
}
| Method | Path | Purpose |
|---|---|---|
| GET | /api/v1/events | List events (with /api/v1/events/:id for one). |
| GET POST | /api/v1/subscriptions | List or register your subscription URL. |
| POST | /api/v1/deliveries/:id/replay | Re-send a delivery (use the id for idempotency). |
| POST | /api/v1/hooks/chain | Internal indexer ingest hook. |
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.
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.
The testnet would run against the existing Sepolia contracts — no new deployment. Each participant would be whitelisted independently:
0xYourWhitelistedAddress), holding its own mint key.APlusAuthority.MINT_ROLE and BURN_ROLE granted exactly as in the onboarding flow that works today.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.
With several issuers active, the exercise is proposed to show:
token.mint(dst, amt) up to its own allowance to issue USDA+, and token.burn(src, amt) (after token.approve) to redeem.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.
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.
mint, burn, or transfer transaction from the whitelisted wallet on Sepolia.pending → finalized), letting the bank verify allowance decrements, balances, and cross-bank effects.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.
por_update event type is a proposed scaffold only.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.
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.
We propose two complementary attestation scopes:
issuer_org_id.org_id = null).por_update eventAttestations 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:
| Field | Type | Description |
|---|---|---|
total_supply | Money | Total USDA+ in circulation for the attested scope (per-issuer or network-wide). |
total_reserves | Money | USD reserves backing that supply, as attested. |
reserve_ratio | number | total_reserves / total_supply. A value >= 1.0 would indicate full reservation. |
as_of | integer | Unix milliseconds the reserves were measured. |
attestation.source | string | Where 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"
}
}
}
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.We propose the attestation.source field would evolve as trust assumptions tighten:
issuer-self-report). Lowest assurance; fastest to ship.third-party-auditor), with a url or ref to the report.onchain-por-feed) the network can read directly, removing the off-chain trust gap.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.
as_of enough, or is a continuous feed_reading needed between snapshots?APlusAuthority) or off-chain by the manager? On-chain enforcement requires a trusted PoR feed.total_reserves is in USD, but reserves may be T-bills or deposits. Who values them, and at what frequency?third-party-auditor attestation, and how would a bank verify signed_by?por_update event and delivery model.PorUpdatePayload.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.
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.
token.mint(dst, amt) directly from its whitelisted wallet, within its existing allowance. The on-chain path would not change.This layer is proposed to be reconciliation and reporting only. It would not centralise compliance.
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.
mint, redeem, por_update, and feed_reading.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.
| GENIUS requirement | How A+ addresses it | Status |
|---|---|---|
| Permitted issuer — only PPSIs (bank / IDI subsidiaries, licensed nonbanks) may issue | Multi-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 rehypothecation | Each 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 holders | USDA+ 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 par | On-chain burn(src, amt) redeems USDA+ 1:1 against the bank's reserves. | Satisfied |
| Monthly reserve attestation + public disclosure of reserve composition and outstanding supply | Proposed 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 controls | pause / unpause on APlusAuthority halts mint / burn authorization network-wide. | Satisfied |
| Key governance appropriate to a regulated issuer | Privilege 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.
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.A+ cannot make a bank compliant; it can only give the bank the rails. Under GENIUS the bank remains responsible for:
freezer key, once deployed, is held and operated by the bank, not by A+).