@thawgate/sdk 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pda.ts","../src/gate/idl.json","../src/programs.ts","../src/gate/reasons.ts","../src/gate/tokenAcl.ts","../src/gate/client.ts","../src/types.ts","../src/presets/sssAcl.ts","../src/wallet.ts","../src/base/token.ts","../src/idl.json","../src/errors.ts","../src/base/roles.ts","../src/modules/compliance.ts","../src/modules/privacy.ts","../src/modules/reserves.ts","../src/client.ts","../src/sas/index.ts","../src/presets/sss1.ts","../src/presets/sss2.ts","../src/presets/sss3.ts","../src/presets/sssBoth.ts","../src/index.ts"],"names":["PublicKey","SystemProgram","TOKEN_2022_PROGRAM_ID","status","RoleType","QuotaPeriod","SSSPreset","ComplianceMode","VersionedTransaction","idl_default","Keypair","getAssociatedTokenAddressSync","ASSOCIATED_TOKEN_PROGRAM_ID","BN","Connection","AnchorProvider","Program","initialize","TransactionInstruction"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @module pda\n * @description PDA derivation helpers for the SSS-Token program.\n *\n * All PDAs are derived from the mint address for consistent addressing.\n * Seeds match the on-chain constants.rs exactly.\n */\n\nimport { PublicKey } from \"@solana/web3.js\";\nimport { RoleType } from \"./types\";\n\n// ============================================================================\n// PDA Seeds (must match on-chain constants.rs)\n// ============================================================================\n\nconst SEED_CONFIG = Buffer.from(\"stablecoin_config\");\nconst SEED_PAUSE = Buffer.from(\"pause_state\");\nconst SEED_ROLE = Buffer.from(\"role\");\nconst SEED_QUOTA = Buffer.from(\"minter_quota\");\nconst SEED_BLACKLIST = Buffer.from(\"blacklist\");\nconst SEED_RESERVE = Buffer.from(\"reserve_attestation\");\n\n// ============================================================================\n// PDA Derivation Functions\n// ============================================================================\n\n/**\n * Derives the StablecoinConfig PDA address.\n *\n * @param mint - The Token-2022 mint address\n * @param programId - The SSS-Token program ID\n * @returns [pda, bump]\n */\nexport function findConfigPda(\n mint: PublicKey,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEED_CONFIG, mint.toBuffer()],\n programId,\n );\n}\n\n/**\n * Derives the PauseState PDA address.\n *\n * @param mint - The Token-2022 mint address\n * @param programId - The SSS-Token program ID\n * @returns [pda, bump]\n */\nexport function findPauseStatePda(\n mint: PublicKey,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEED_PAUSE, mint.toBuffer()],\n programId,\n );\n}\n\n/**\n * Derives a RoleRecord PDA address.\n *\n * @param mint - The Token-2022 mint address\n * @param holder - The role holder's public key\n * @param role - The role type\n * @param programId - The SSS-Token program ID\n * @returns [pda, bump]\n */\nexport function findRolePda(\n mint: PublicKey,\n holder: PublicKey,\n role: RoleType,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEED_ROLE, mint.toBuffer(), holder.toBuffer(), Buffer.from([role])],\n programId,\n );\n}\n\n/**\n * Derives a MinterQuota PDA address.\n *\n * @param mint - The Token-2022 mint address\n * @param minter - The minter's public key\n * @param programId - The SSS-Token program ID\n * @returns [pda, bump]\n */\nexport function findQuotaPda(\n mint: PublicKey,\n minter: PublicKey,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEED_QUOTA, mint.toBuffer(), minter.toBuffer()],\n programId,\n );\n}\n\n/**\n * Derives a BlacklistEntry PDA address.\n *\n * @param mint - The Token-2022 mint address\n * @param target - The blacklisted wallet's public key\n * @param programId - The SSS-Token program ID\n * @returns [pda, bump]\n */\nexport function findBlacklistPda(\n mint: PublicKey,\n target: PublicKey,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEED_BLACKLIST, mint.toBuffer(), target.toBuffer()],\n programId,\n );\n}\n\n/**\n * Derives an AllowlistEntry PDA address (`add_to_allowlist_v3`; read by ThawGate AllowOnly / BypassForPdas policies).\n *\n * @param mint - The Token-2022 mint address\n * @param wallet - The allowlisted wallet's public key\n * @param programId - The SSS-Token program ID\n * @returns [pda, bump]\n */\nexport function findAllowlistPda(\n mint: PublicKey,\n wallet: PublicKey,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"allowlist\"), mint.toBuffer(), wallet.toBuffer()],\n programId,\n );\n}\n\n/**\n * Derives the ReserveAttestation PDA address (S9).\n *\n * @param mint - The Token-2022 mint address\n * @param programId - The SSS-Token program ID\n * @returns [pda, bump]\n */\nexport function findReserveAttestationPda(\n mint: PublicKey,\n programId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEED_RESERVE, mint.toBuffer()],\n programId,\n );\n}\n\n/**\n * Derives the ExtraAccountMetaList PDA for the transfer hook.\n *\n * @param mint - The Token-2022 mint address\n * @param hookProgramId - The transfer hook program ID\n * @returns [pda, bump]\n */\nexport function findExtraAccountMetaListPda(\n mint: PublicKey,\n hookProgramId: PublicKey,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"extra-account-metas\"), mint.toBuffer()],\n hookProgramId,\n );\n}\n","{\n \"address\": \"THAW2daLXyUtCLtTsJWDTKZctiAGmGX4wT1kqKXugUZ\",\n \"metadata\": {\n \"name\": \"thawgate_gate\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"ThawGate: Token ACL (sRFC 37) gating program with issuer blacklist, allowlist and SAS KYC policies\"\n },\n \"instructions\": [\n {\n \"name\": \"can_freeze_permissionless\",\n \"docs\": [\n \"Token ACL gate interface: may this token account be frozen permissionlessly?\"\n ],\n \"discriminator\": [\n 214,\n 141,\n 109,\n 75,\n 248,\n 1,\n 45,\n 29\n ],\n \"accounts\": [\n {\n \"name\": \"caller\"\n },\n {\n \"name\": \"token_account\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"owner\"\n },\n {\n \"name\": \"flag_account\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"can_thaw_permissionless\",\n \"docs\": [\n \"Token ACL gate interface: may this token account be thawed permissionlessly?\"\n ],\n \"discriminator\": [\n 8,\n 175,\n 169,\n 129,\n 137,\n 74,\n 61,\n 241\n ],\n \"accounts\": [\n {\n \"name\": \"caller\"\n },\n {\n \"name\": \"token_account\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"owner\"\n },\n {\n \"name\": \"flag_account\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_policy\",\n \"docs\": [\n \"Creates the mint's policy and its thaw/freeze extra-metas lists.\",\n \"Signed by the Token ACL freeze authority; `args.authority` becomes the policy admin.\"\n ],\n \"discriminator\": [\n 45,\n 234,\n 110,\n 100,\n 209,\n 146,\n 191,\n 86\n ],\n \"accounts\": [\n {\n \"name\": \"freeze_authority\",\n \"docs\": [\n \"Token ACL `MintConfig.freeze_authority` of this mint. Can be a PDA signing through CPI\",\n \"(the sss-token config in S6). The policy admin is `args.authority`, which may be someone else.\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Pays rent. Separate from `freeze_authority`, since a program-owned PDA cannot fund `create_account`.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"policy\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 108,\n 105,\n 99,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"mint_config\"\n },\n {\n \"name\": \"thaw_extra_metas\",\n \"writable\": true\n },\n {\n \"name\": \"freeze_extra_metas\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"PolicyArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"setup_extra_metas\",\n \"docs\": [\n \"Rewrites both extra-metas lists from the stored policy (idempotent).\"\n ],\n \"discriminator\": [\n 160,\n 172,\n 133,\n 35,\n 114,\n 239,\n 51,\n 158\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\n \"policy\"\n ]\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"policy\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 108,\n 105,\n 99,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\",\n \"relations\": [\n \"policy\"\n ]\n },\n {\n \"name\": \"thaw_extra_metas\",\n \"writable\": true\n },\n {\n \"name\": \"freeze_extra_metas\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"update_policy\",\n \"docs\": [\n \"Changes the policy and rewrites both extra-metas lists to match.\"\n ],\n \"discriminator\": [\n 212,\n 245,\n 246,\n 7,\n 163,\n 151,\n 18,\n 57\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\n \"policy\"\n ]\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"policy\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 108,\n 105,\n 99,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\",\n \"relations\": [\n \"policy\"\n ]\n },\n {\n \"name\": \"thaw_extra_metas\",\n \"writable\": true\n },\n {\n \"name\": \"freeze_extra_metas\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"PolicyArgs\"\n }\n }\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"GatePolicy\",\n \"discriminator\": [\n 3,\n 77,\n 45,\n 55,\n 30,\n 166,\n 143,\n 147\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidMintConfig\",\n \"msg\": \"Not a Token ACL MintConfig (owner, size or discriminator)\"\n },\n {\n \"code\": 6001,\n \"name\": \"MintConfigMismatch\",\n \"msg\": \"The MintConfig belongs to a different mint\"\n },\n {\n \"code\": 6002,\n \"name\": \"NotFreezeAuthority\",\n \"msg\": \"Signer is not the Token ACL freeze authority of this mint\"\n },\n {\n \"code\": 6003,\n \"name\": \"NotPolicyAuthority\",\n \"msg\": \"Signer is not the policy authority\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidMint\",\n \"msg\": \"Mint is not a Token-2022 mint\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidExtraMetasAccount\",\n \"msg\": \"Extra-metas account is not the expected PDA\"\n },\n {\n \"code\": 6006,\n \"name\": \"MissingIssuerProgram\",\n \"msg\": \"issuer_program must be set when the blacklist or allowlist is enabled\"\n },\n {\n \"code\": 6007,\n \"name\": \"MissingSasConfig\",\n \"msg\": \"sas_credential and sas_schema must be set when require_sas is on\"\n },\n {\n \"code\": 6008,\n \"name\": \"BypassNeedsSas\",\n \"msg\": \"BypassForPdas stands in for the SAS credential, so it needs require_sas\"\n },\n {\n \"code\": 6009,\n \"name\": \"DeniedMissingAccounts\",\n \"msg\": \"TG:DENY:MISSING_ACCOUNTS: extra accounts missing\"\n },\n {\n \"code\": 6010,\n \"name\": \"DeniedBadPolicy\",\n \"msg\": \"TG:DENY:BAD_POLICY: policy account is not this mint's GatePolicy\"\n },\n {\n \"code\": 6011,\n \"name\": \"DeniedBadRegistryEntry\",\n \"msg\": \"TG:DENY:BAD_REGISTRY_ENTRY: registry account has the wrong owner, type or fields\"\n },\n {\n \"code\": 6012,\n \"name\": \"DeniedBadCredential\",\n \"msg\": \"TG:DENY:BAD_CREDENTIAL: attestation account is not a SAS attestation of this credential, schema and owner\"\n },\n {\n \"code\": 6013,\n \"name\": \"DeniedNoImmutableOwner\",\n \"msg\": \"TG:DENY:NO_IMMUTABLE_OWNER: token account lacks the ImmutableOwner extension\"\n },\n {\n \"code\": 6014,\n \"name\": \"DeniedBlacklisted\",\n \"msg\": \"TG:DENY:BLACKLISTED: owner is on the issuer blacklist\"\n },\n {\n \"code\": 6015,\n \"name\": \"DeniedNotAllowlisted\",\n \"msg\": \"TG:DENY:NOT_ALLOWLISTED: owner is not on the issuer allowlist\"\n },\n {\n \"code\": 6016,\n \"name\": \"DeniedNoCredential\",\n \"msg\": \"TG:DENY:NO_CREDENTIAL: owner has no SAS attestation (never issued, or revoked)\"\n },\n {\n \"code\": 6017,\n \"name\": \"DeniedCredentialExpired\",\n \"msg\": \"TG:DENY:CREDENTIAL_EXPIRED: owner's SAS attestation has expired\"\n },\n {\n \"code\": 6018,\n \"name\": \"DeniedKycLevelTooLow\",\n \"msg\": \"TG:DENY:KYC_LEVEL_TOO_LOW: owner's kyc_level is below the policy minimum\"\n },\n {\n \"code\": 6019,\n \"name\": \"DeniedCompliant\",\n \"msg\": \"TG:DENY:COMPLIANT: owner passes the policy, so it cannot be frozen permissionlessly\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AllowlistMode\",\n \"docs\": [\n \"How the issuer allowlist is used.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Off\"\n },\n {\n \"name\": \"AllowOnly\"\n },\n {\n \"name\": \"BypassForPdas\"\n }\n ]\n }\n },\n {\n \"name\": \"GatePolicy\",\n \"docs\": [\n \"One per mint. Token ACL resolves it for the gate as extra account `[6]`.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"version\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"May change the policy (`update_policy`, `setup_extra_metas`).\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"issuer_program\",\n \"docs\": [\n \"Program that owns the registry (sss-token): `BlacklistEntry` at `[\\\"blacklist\\\", mint, wallet]`,\",\n \"`AllowlistEntry` at `[\\\"allowlist\\\", mint, wallet]`.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"check_blacklist\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"allowlist_mode\",\n \"type\": {\n \"defined\": {\n \"name\": \"AllowlistMode\"\n }\n }\n },\n {\n \"name\": \"require_sas\",\n \"docs\": [\n \"SAS KYC policy: the owner needs a live attestation at `[\\\"attestation\\\", sas_credential, sas_schema, owner]`\",\n \"under SAS (nonce = holder wallet).\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"sas_credential\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"sas_schema\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"min_kyc_level\",\n \"docs\": [\n \"0 = any level. Otherwise compared with the attestation data's first byte, so the schema's first field must\",\n \"be `kyc_level: u8`.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"reserved\",\n \"docs\": [\n \"Room for later policies (sanctions, keeper settings) without a realloc.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 64\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PolicyArgs\",\n \"docs\": [\n \"Settable policy fields, for `init_policy` and `update_policy`.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"issuer_program\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"check_blacklist\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"allowlist_mode\",\n \"type\": {\n \"defined\": {\n \"name\": \"AllowlistMode\"\n }\n }\n },\n {\n \"name\": \"require_sas\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"sas_credential\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"sas_schema\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"min_kyc_level\",\n \"type\": \"u8\"\n }\n ]\n }\n }\n ]\n}","/**\n * @module programs\n * @description Program IDs the SDK talks to. ThawGate's own programs are deployed on devnet (localnet uses the same\n * IDs); Token ACL, SAS and the ABL gate are the upstream deployments, the same address on devnet and mainnet.\n */\n\nimport { PublicKey } from \"@solana/web3.js\";\n\n/** sss-token, the example issuer (devnet). */\nexport const SSS_TOKEN_PROGRAM_ID = new PublicKey(\"HLvhfKVfGfKXVNS9tZ1q7SNS4w9mQmcjre758QFhbZDZ\");\n/** The SSS transfer hook (devnet). Used by SSS-2 and Both mints only. */\nexport const TRANSFER_HOOK_PROGRAM_ID = new PublicKey(\"2wcwbEsw7rZ2t36qaDujHUc9HHrg3f5m4opcSHpixNUv\");\n/** The ThawGate gating program (devnet; unaudited, never deployed to mainnet). */\nexport const THAWGATE_GATE_PROGRAM_ID = new PublicKey(\"THAW2daLXyUtCLtTsJWDTKZctiAGmGX4wT1kqKXugUZ\");\n/** Token ACL (sRFC 37). */\nexport const TOKEN_ACL_PROGRAM_ID = new PublicKey(\"TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP\");\n/** Solana Attestation Service. */\nexport const SAS_PROGRAM_ID = new PublicKey(\"22zoJMtdu4tQc2PzL74ZUT7FrwgB1Udec8DdW4yw4BdG\");\n/** Token ACL's reference allow/block-list gate (ABL). */\nexport const ABL_GATE_PROGRAM_ID = new PublicKey(\"GATEzzqxhJnsWF6vHRsgtixxSB8PaQdcqGEVTEHWiULz\");\n","/**\n * @module gate/reasons\n * @description ThawGate's reason codes and the one parser for them.\n *\n * On every thaw and freeze decision the gate logs `TG:ALLOW:<CODE>` or `TG:DENY:<CODE>`\n * (programs/thawgate-gate/src/decision.rs). `explain()`, `freezeIfInvalid()` and the keeper all read a transaction's\n * logs through {@link classifyGateLogs}, so a wallet's reason is computed one way everywhere.\n *\n * This module has no imports. Services that don't want the SDK's Solana dependencies load it on its own:\n * `import { classifyGateLogs } from \"@thawgate/sdk/reasons\"`.\n */\n\n/** The ThawGate gating program (devnet). The same value as `THAWGATE_GATE_PROGRAM_ID`, as a string. */\nexport const THAWGATE_GATE_ID = \"THAW2daLXyUtCLtTsJWDTKZctiAGmGX4wT1kqKXugUZ\";\n\n/** Which Token ACL permissionless instruction called the gate. */\nexport type GateAction = \"thaw\" | \"freeze\";\n\n/** Why a thaw passes (`TG:ALLOW:<code>` on thaw). */\nexport const THAW_ALLOW_CODES = [\"KYC\", \"PDA_ALLOWLISTED\", \"ALLOWLISTED\", \"CLEAN\"] as const;\n/** A policy flag on the owner: `TG:DENY:<code>` on thaw, `TG:ALLOW:<code>` on freeze. */\nexport const FLAG_CODES = [\"BLACKLISTED\", \"NOT_ALLOWLISTED\", \"NO_CREDENTIAL\", \"CREDENTIAL_EXPIRED\", \"KYC_LEVEL_TOO_LOW\"] as const;\n/** Denied before any policy decision, on thaw and on freeze. */\nexport const STRUCTURAL_DENY_CODES = [\"MISSING_ACCOUNTS\", \"BAD_POLICY\", \"BAD_REGISTRY_ENTRY\", \"BAD_CREDENTIAL\"] as const;\n\nexport type ThawAllowCode = (typeof THAW_ALLOW_CODES)[number];\nexport type FlagCode = (typeof FLAG_CODES)[number];\nexport type StructuralDenyCode = (typeof STRUCTURAL_DENY_CODES)[number];\n/** Every code the gate logs. `NO_IMMUTABLE_OWNER` denies a thaw only; `COMPLIANT` denies a freeze only. */\nexport type TgCode = ThawAllowCode | FlagCode | StructuralDenyCode | \"NO_IMMUTABLE_OWNER\" | \"COMPLIANT\";\n\n/** What each code says about the owner, as the second half of a sentence. */\nconst FACTS: Record<TgCode, string> = {\n KYC: \"the owner holds a live SAS attestation from the policy's credential and schema\",\n PDA_ALLOWLISTED: \"the owner is a program address (PDA) on the issuer's allowlist (BypassForPdas)\",\n ALLOWLISTED: \"the owner is on the issuer's allowlist\",\n CLEAN: \"no policy check flags the owner\",\n BLACKLISTED: \"the owner is on the issuer's blacklist\",\n NOT_ALLOWLISTED: \"the policy is allowlist-only and the owner is not on the issuer's allowlist\",\n NO_CREDENTIAL: \"the owner has no SAS attestation from the policy's credential and schema (never issued, or revoked)\",\n CREDENTIAL_EXPIRED: \"the owner's SAS attestation has expired\",\n KYC_LEVEL_TOO_LOW: \"the owner's kyc_level is below the policy minimum\",\n NO_IMMUTABLE_OWNER: \"the token account lacks the ImmutableOwner extension (use an associated token account)\",\n MISSING_ACCOUNTS: \"the transaction left out accounts the policy needs (resolve the gate's extra account metas)\",\n BAD_POLICY: \"the policy account is not this mint's ThawGate policy\",\n BAD_REGISTRY_ENTRY: \"a blacklist or allowlist account has the wrong owner, type or fields\",\n BAD_CREDENTIAL: \"the account at the attestation address is not a SAS attestation of this credential, schema and owner\",\n COMPLIANT: \"the owner passes the policy\",\n};\n\n/**\n * The gate's custom error number for each `TG:DENY` code (errors.rs `Denied*`, 6009–6019). Used only when a\n * simulation's logs were cut before the gate's own line.\n */\nexport const GATE_DENY_ERRORS: Readonly<Record<number, TgCode>> = {\n 6009: \"MISSING_ACCOUNTS\",\n 6010: \"BAD_POLICY\",\n 6011: \"BAD_REGISTRY_ENTRY\",\n 6012: \"BAD_CREDENTIAL\",\n 6013: \"NO_IMMUTABLE_OWNER\",\n 6014: \"BLACKLISTED\",\n 6015: \"NOT_ALLOWLISTED\",\n 6016: \"NO_CREDENTIAL\",\n 6017: \"CREDENTIAL_EXPIRED\",\n 6018: \"KYC_LEVEL_TOO_LOW\",\n 6019: \"COMPLIANT\",\n};\n\nexport function isTgCode(code: string): code is TgCode {\n return Object.prototype.hasOwnProperty.call(FACTS, code);\n}\n\n/**\n * A human sentence for a gate decision, e.g. `describe(\"DENY\", \"NO_CREDENTIAL\", \"thaw\")` →\n * \"Unlock denied: the owner has no SAS attestation …\". The action matters: BLACKLISTED denies a thaw but allows a freeze.\n */\nexport function describe(decision: \"ALLOW\" | \"DENY\", code: string, action: GateAction): string {\n const fact = isTgCode(code) ? FACTS[code] : `the gate returned ${code}, a code this SDK version doesn't know`;\n if (action === \"thaw\") return `${decision === \"ALLOW\" ? \"Unlock allowed\" : \"Unlock denied\"}: ${fact}.`;\n if (decision === \"ALLOW\") return `Freezable by anyone: ${fact}.`;\n return code === \"COMPLIANT\" ? `Not freezable: ${fact}.` : `Freeze denied: ${fact}.`;\n}\n\nexport interface GateLogs {\n /** A frame of the gating program appears in the logs. */\n gateInvoked: boolean;\n /** The gate's `TG:` line: the first one inside one of its own frames. */\n decision: { kind: \"ALLOW\" | \"DENY\"; code: string } | null;\n /** The first `Program <id> failed: <message>` line. */\n failure: { program: string; message: string } | null;\n}\n\nconst INVOKE = /^Program (\\S+) invoke \\[\\d+\\]$/;\nconst EXIT = /^Program (\\S+) (?:success|failed: .*)$/;\nconst FAILED = /^Program (\\S+) failed: (.*)$/;\nconst TG_LINE = /^Program log: .*?TG:(ALLOW|DENY):([A-Z_]+)/;\n\n/**\n * Reads a transaction's (or a simulation's) logs. Only `TG:` lines logged inside the gate's own frames count, so a\n * different gating program can't impersonate a ThawGate decision. The first match wins: the gate's `msg!` line comes\n * before Anchor's error line, which repeats the code.\n */\nexport function parseGateLogs(logs: readonly string[], gateId: string = THAWGATE_GATE_ID): GateLogs {\n const stack: string[] = [];\n let gateInvoked = false;\n let decision: GateLogs[\"decision\"] = null;\n let failure: GateLogs[\"failure\"] = null;\n for (const line of logs) {\n const invoke = INVOKE.exec(line);\n if (invoke) {\n stack.push(invoke[1]);\n if (invoke[1] === gateId) gateInvoked = true;\n continue;\n }\n const failed = FAILED.exec(line);\n if (failed && !failure) failure = { program: failed[1], message: failed[2] };\n if (EXIT.test(line)) {\n stack.pop();\n continue;\n }\n if (!decision && stack[stack.length - 1] === gateId) {\n const tg = TG_LINE.exec(line);\n if (tg) decision = { kind: tg[1] as \"ALLOW\" | \"DENY\", code: tg[2] };\n }\n }\n return { gateInvoked, decision, failure };\n}\n\n/** The gate's verdict on one thaw or freeze transaction. */\nexport type GateVerdict =\n /** The gate allowed it (a thaw unlocked the account, or a freeze froze it). */\n | { outcome: \"allowed\"; code: string; reason: string }\n /** The gate denied it. On freeze, `COMPLIANT` means the owner passes the policy. */\n | { outcome: \"denied\"; code: string; reason: string }\n /** It succeeded without calling the gate: Token ACL's idempotent instructions return early on an account already\n * in the target state. */\n | { outcome: \"skipped\"; reason: string }\n /** It failed outside the gate's decision (Token ACL, Token-2022, the system program, fees, …). */\n | { outcome: \"failed\"; program: string; message: string; reason: string };\n\n/**\n * The verdict of a thaw or freeze transaction from its logs. `succeeded` is whether it landed (or simulated) without\n * error. `errorCode` is the custom error number of a failed instruction, when known: it recovers the gate's code if\n * the logs were cut.\n */\nexport function classifyGateLogs(\n logs: readonly string[],\n succeeded: boolean,\n action: GateAction,\n opts: { gateId?: string; errorCode?: number } = {},\n): GateVerdict {\n const { gateInvoked, decision, failure } = parseGateLogs(logs, opts.gateId);\n if (succeeded) {\n if (!gateInvoked) {\n const state = action === \"thaw\" ? \"thawed\" : \"frozen\";\n return { outcome: \"skipped\", reason: `No change: the account is already ${state}, so Token ACL did not call the gate.` };\n }\n const code = decision?.kind === \"ALLOW\" ? decision.code : \"UNKNOWN\";\n return { outcome: \"allowed\", code, reason: describe(\"ALLOW\", code, action) };\n }\n if (decision?.kind === \"DENY\") return { outcome: \"denied\", code: decision.code, reason: describe(\"DENY\", decision.code, action) };\n // Truncated logs (\"Log truncated\") usually lose the gate's own failed line too, so accept a missing failure line.\n // 6009–6019 don't collide with Token ACL's or Token-2022's error numbers, which are small.\n const gateFailed = failure === null || failure.program === (opts.gateId ?? THAWGATE_GATE_ID);\n const fromError = opts.errorCode !== undefined && gateFailed ? GATE_DENY_ERRORS[opts.errorCode] : undefined;\n if (fromError) return { outcome: \"denied\", code: fromError, reason: describe(\"DENY\", fromError, action) };\n if (failure) {\n return {\n outcome: \"failed\",\n program: failure.program,\n message: failure.message,\n reason: `Failed before the gate decided: ${failure.program} returned \"${failure.message}\".`,\n };\n }\n return { outcome: \"failed\", program: \"unknown\", message: \"no logs\", reason: \"Failed, and the logs give no reason.\" };\n}\n","/**\n * @module gate/tokenAcl\n * @description Token ACL (sRFC 37) instructions on @solana/web3.js v1.\n *\n * Hand-built from @token-acl/sdk 0.2.7's generated code, which is @solana/kit-based (and its `*WithExtraMetas`\n * builders print to the console). tests/tokenAcl.test.ts pins every builder here byte-for-byte against it. Extra\n * account metas resolve with @solana/spl-token's resolver, the same algorithm @token-acl/sdk uses.\n */\n\nimport {\n AccountMeta,\n Connection,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { TOKEN_2022_PROGRAM_ID, getExtraAccountMetas, resolveExtraAccountMeta } from \"@solana/spl-token\";\nimport { TOKEN_ACL_PROGRAM_ID } from \"../programs\";\n\n/** Token ACL instruction discriminators (one byte). */\nexport const TOKEN_ACL_IX = {\n createConfig: 0,\n setAuthority: 1,\n setGatingProgram: 2,\n deleteConfig: 3,\n thaw: 4,\n freeze: 5,\n thawPermissionless: 6,\n freezePermissionless: 7,\n togglePermissionlessInstructions: 8,\n thawPermissionlessIdempotent: 9,\n freezePermissionlessIdempotent: 10,\n} as const;\n\n/** `[\"MINT_CONFIG\", mint]` under Token ACL. */\nexport function findMintConfigPda(mint: PublicKey, programId: PublicKey = TOKEN_ACL_PROGRAM_ID): PublicKey {\n return PublicKey.findProgramAddressSync([Buffer.from(\"MINT_CONFIG\"), mint.toBuffer()], programId)[0];\n}\n\n/** `[\"FLAG_ACCOUNT\", tokenAccount]` under Token ACL: created and closed inside a permissionless thaw or freeze. */\nexport function findFlagAccountPda(tokenAccount: PublicKey, programId: PublicKey = TOKEN_ACL_PROGRAM_ID): PublicKey {\n return PublicKey.findProgramAddressSync([Buffer.from(\"FLAG_ACCOUNT\"), tokenAccount.toBuffer()], programId)[0];\n}\n\n/** The gating program's extra-metas list for permissionless thaw: `[\"thaw_extra_account_metas\", mint]` under the gate. */\nexport function findThawExtraMetasPda(mint: PublicKey, gatingProgram: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync([Buffer.from(\"thaw_extra_account_metas\"), mint.toBuffer()], gatingProgram)[0];\n}\n\n/** The gating program's extra-metas list for permissionless freeze: `[\"freeze_extra_account_metas\", mint]`. */\nexport function findFreezeExtraMetasPda(mint: PublicKey, gatingProgram: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync([Buffer.from(\"freeze_extra_account_metas\"), mint.toBuffer()], gatingProgram)[0];\n}\n\n/** Token ACL's per-mint config. `freezeAuthority` may freeze, thaw and change the gate; it is the mint's freeze authority. */\nexport interface MintConfig {\n bump: number;\n enablePermissionlessThaw: boolean;\n enablePermissionlessFreeze: boolean;\n mint: PublicKey;\n freezeAuthority: PublicKey;\n gatingProgram: PublicKey;\n}\n\n/** u8 discriminator (1), bump, two flags, then three pubkeys. */\nexport const MINT_CONFIG_SIZE = 100;\n\nexport function decodeMintConfig(data: Buffer | Uint8Array): MintConfig {\n const b = Buffer.from(data);\n if (b.length < MINT_CONFIG_SIZE || b[0] !== 1) throw new Error(\"not a Token ACL MintConfig\");\n return {\n bump: b[1],\n enablePermissionlessThaw: b[2] !== 0,\n enablePermissionlessFreeze: b[3] !== 0,\n mint: new PublicKey(b.subarray(4, 36)),\n freezeAuthority: new PublicKey(b.subarray(36, 68)),\n gatingProgram: new PublicKey(b.subarray(68, 100)),\n };\n}\n\n/** The mint's Token ACL config, or `null` if the mint has none (it is not a Token ACL mint). */\nexport async function fetchMintConfig(connection: Connection, mint: PublicKey): Promise<MintConfig | null> {\n const info = await connection.getAccountInfo(findMintConfigPda(mint));\n if (!info || !info.owner.equals(TOKEN_ACL_PROGRAM_ID)) return null;\n return decodeMintConfig(info.data);\n}\n\n/** Switch the mint's gating program. Signed by the MintConfig freeze authority. */\nexport function setGatingProgramIx(args: { authority: PublicKey; mint: PublicKey; gatingProgram: PublicKey }): TransactionInstruction {\n return new TransactionInstruction({\n programId: TOKEN_ACL_PROGRAM_ID,\n keys: [\n { pubkey: args.authority, isSigner: true, isWritable: false },\n { pubkey: findMintConfigPda(args.mint), isSigner: false, isWritable: true },\n ],\n data: Buffer.concat([Buffer.from([TOKEN_ACL_IX.setGatingProgram]), args.gatingProgram.toBuffer()]),\n });\n}\n\n/** Enable or disable permissionless freeze and thaw. Signed by the MintConfig freeze authority. */\nexport function togglePermissionlessIx(args: { authority: PublicKey; mint: PublicKey; freeze: boolean; thaw: boolean }): TransactionInstruction {\n return new TransactionInstruction({\n programId: TOKEN_ACL_PROGRAM_ID,\n keys: [\n { pubkey: args.authority, isSigner: true, isWritable: false },\n { pubkey: findMintConfigPda(args.mint), isSigner: false, isWritable: true },\n ],\n data: Buffer.from([TOKEN_ACL_IX.togglePermissionlessInstructions, args.freeze ? 1 : 0, args.thaw ? 1 : 0]),\n });\n}\n\n/**\n * A permissionless Token ACL instruction. The idempotent variants return early, without calling the gate, when the\n * account is already in the target state.\n */\nexport type PermissionlessKind = \"thaw\" | \"thawIdempotent\" | \"freeze\" | \"freezeIdempotent\";\n\nconst DISC: Record<PermissionlessKind, number> = {\n thaw: TOKEN_ACL_IX.thawPermissionless,\n thawIdempotent: TOKEN_ACL_IX.thawPermissionlessIdempotent,\n freeze: TOKEN_ACL_IX.freezePermissionless,\n freezeIdempotent: TOKEN_ACL_IX.freezePermissionlessIdempotent,\n};\n\nexport interface PermissionlessArgs {\n /** Signs and pays for the flag account's rent (refunded in the same instruction). Anyone may call. */\n caller: PublicKey;\n mint: PublicKey;\n tokenAccount: PublicKey;\n /** The token account's owner. Token ACL checks it against the account. */\n owner: PublicKey;\n /** The mint's config, if already fetched. */\n mintConfig?: MintConfig;\n}\n\n/**\n * Builds `thaw_permissionless` / `freeze_permissionless` (or an idempotent variant) with the gating program's extra\n * accounts resolved, like @token-acl/sdk's `create*InstructionWithExtraMetas`.\n *\n * The gate receives `[caller, token_account, mint, owner, flag_account, extra_metas, ...extras]`. Its meta list's\n * seeds index into that list, so the resolver starts from those six accounts and appends each resolved meta in turn\n * (a later seed can reference an earlier extra, e.g. the attestation's credential and schema).\n */\nexport async function permissionlessIx(connection: Connection, kind: PermissionlessKind, args: PermissionlessArgs): Promise<TransactionInstruction> {\n const mintConfig = args.mintConfig ?? (await fetchMintConfig(connection, args.mint));\n if (!mintConfig) throw new Error(`mint ${args.mint.toBase58()} has no Token ACL MintConfig`);\n const gating = mintConfig.gatingProgram;\n const flag = findFlagAccountPda(args.tokenAccount);\n const isThaw = kind === \"thaw\" || kind === \"thawIdempotent\";\n const extraMetas = isThaw ? findThawExtraMetasPda(args.mint, gating) : findFreezeExtraMetasPda(args.mint, gating);\n const data = Buffer.from([DISC[kind]]);\n\n const keys: AccountMeta[] = [\n { pubkey: args.caller, isSigner: true, isWritable: false },\n { pubkey: args.mint, isSigner: false, isWritable: false },\n { pubkey: args.tokenAccount, isSigner: false, isWritable: true },\n { pubkey: flag, isSigner: false, isWritable: true },\n { pubkey: args.owner, isSigner: false, isWritable: false },\n { pubkey: findMintConfigPda(args.mint), isSigner: false, isWritable: false },\n { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n { pubkey: gating, isSigner: false, isWritable: false },\n ];\n\n const list = await connection.getAccountInfo(extraMetas);\n if (!list) throw new Error(`the gating program's ${isThaw ? \"thaw\" : \"freeze\"} extra-metas account ${extraMetas.toBase58()} does not exist`);\n if (!list.owner.equals(gating)) throw new Error(`extra-metas account ${extraMetas.toBase58()} is not owned by the gating program`);\n\n const ro = (pubkey: PublicKey): AccountMeta => ({ pubkey, isSigner: false, isWritable: false });\n const resolved: AccountMeta[] = [ro(args.caller), ro(args.tokenAccount), ro(args.mint), ro(args.owner), ro(flag), ro(extraMetas)];\n for (const meta of getExtraAccountMetas(list)) {\n resolved.push(await resolveExtraAccountMeta(connection, meta, resolved, data, gating));\n }\n return new TransactionInstruction({ programId: TOKEN_ACL_PROGRAM_ID, keys: [...keys, ...resolved.slice(5)], data });\n}\n","/**\n * @module gate/client\n * @description GateClient: ThawGate policies and the holder-side flows (unlock, explain, freeze-if-invalid) for any\n * Token ACL mint gated by ThawGate, whoever issued it. sss-token mints get it as `SolanaStablecoin#gate`.\n *\n * @example\n * ```ts\n * const gate = new GateClient(connection, wallet);\n * const why = await gate.explain(mint, holder); // simulate: may this wallet unlock? why not?\n * await gate.send(await gate.createAtaAndThaw(mint, holder));\n * await gate.freezeIfInvalid(tokenAccount); // freezes only if the gate allows it\n * ```\n */\n\nimport { AnchorProvider, Program } from \"@coral-xyz/anchor\";\nimport {\n AccountInfo,\n Commitment,\n Connection,\n PublicKey,\n Signer,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n TOKEN_2022_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n createUpdateFieldInstruction,\n getAssociatedTokenAddressSync,\n getTokenMetadata,\n unpackAccount,\n} from \"@solana/spl-token\";\n\n/** The mint metadata field Token ACL clients read to find a mint's gate (@token-acl/sdk `TOKEN_ACL_METADATA_KEY`). */\nexport const TOKEN_ACL_METADATA_KEY = \"token_acl\";\nimport GATE_IDL from \"./idl.json\";\nimport type { ThawgateGate } from \"./idl-type\";\nimport { SSS_TOKEN_PROGRAM_ID, THAWGATE_GATE_PROGRAM_ID } from \"../programs\";\nimport { findConfigPda } from \"../pda\";\nimport { GateAction, GateVerdict, classifyGateLogs } from \"./reasons\";\nimport {\n MintConfig,\n PermissionlessKind,\n fetchMintConfig,\n findFreezeExtraMetasPda,\n findMintConfigPda,\n findThawExtraMetasPda,\n permissionlessIx,\n setGatingProgramIx,\n togglePermissionlessIx,\n} from \"./tokenAcl\";\n\n/** An Anchor-style wallet: a public key that signs transactions. `keypairWallet(keypair)` makes one. */\nexport type GateWallet = AnchorProvider[\"wallet\"];\n\n/** How the issuer's allowlist is used. `bypassForPdas` lets allowlisted program-owned accounts (pool vaults) skip SAS. */\nexport type AllowlistMode = \"off\" | \"allowOnly\" | \"bypassForPdas\";\n\n/** A policy, as you write it. Every field is optional; the defaults are off. */\nexport interface PolicyInput {\n /** Deny holders with an active blacklist entry in the issuer program. */\n checkBlacklist?: boolean;\n allowlistMode?: AllowlistMode;\n /** Require a live SAS attestation (nonce = the holder's wallet) under this credential and schema. `null` turns SAS off. */\n sas?: { credential: PublicKey; schema: PublicKey; minKycLevel?: number } | null;\n /** Owner of the blacklist/allowlist entries. Default: sss-token when either list is on. Ignored by `enableTokenAcl`. */\n issuerProgram?: PublicKey;\n /** Who may change the policy. Default: the payer. Ignored by `enableTokenAcl` (it uses the issuer's authority). */\n authority?: PublicKey;\n}\n\n/** A policy as stored on chain (`[\"policy\", mint]` under the gate). */\nexport interface GatePolicy {\n address: PublicKey;\n version: number;\n mint: PublicKey;\n authority: PublicKey;\n issuerProgram: PublicKey;\n checkBlacklist: boolean;\n allowlistMode: AllowlistMode;\n requireSas: boolean;\n sasCredential: PublicKey;\n sasSchema: PublicKey;\n minKycLevel: number;\n}\n\n/** What `explain` found. */\nexport interface Explanation {\n mint: PublicKey;\n wallet: PublicKey;\n tokenAccount: PublicKey;\n /** The token account before the simulation. */\n account: \"missing\" | \"frozen\" | \"thawed\";\n /**\n * - `can_unlock`: the account is missing or frozen, and a permissionless thaw would succeed.\n * - `denied`: a thaw would be refused (`code` says why).\n * - `compliant`: the account is thawed and nobody can freeze it permissionlessly.\n * - `freezable`: the account is thawed, but the policy flags the owner, so anyone can freeze it (`code` says why).\n * - `not_token_acl`, `permissionless_disabled`, `error`: see `reason`.\n */\n status: \"can_unlock\" | \"denied\" | \"compliant\" | \"freezable\" | \"not_token_acl\" | \"permissionless_disabled\" | \"error\";\n /** The gate's reason code (`KYC`, `NO_CREDENTIAL`, …), or null when the gate did not decide. */\n code: string | null;\n /** One sentence for a person. */\n reason: string;\n /** What was simulated: a thaw (missing or frozen account) or a freeze (thawed account). */\n simulated: GateAction | null;\n gatingProgram: PublicKey | null;\n verdict: GateVerdict | null;\n logs: string[];\n}\n\nexport interface FreezeResult {\n frozen: boolean;\n /** It was frozen before this call. */\n alreadyFrozen: boolean;\n code: string | null;\n reason: string;\n signature?: string;\n}\n\nconst ALLOWLIST_TO_ANCHOR: Record<AllowlistMode, object> = { off: { off: {} }, allowOnly: { allowOnly: {} }, bypassForPdas: { bypassForPdas: {} } };\n\nfunction allowlistFromAnchor(mode: Record<string, unknown>): AllowlistMode {\n const k = Object.keys(mode)[0];\n if (k === \"off\" || k === \"allowOnly\" || k === \"bypassForPdas\") return k;\n throw new Error(`unknown allowlist mode ${k}`);\n}\n\n/** sss-token's `GatePolicyConfig` (the `enable_token_acl` argument) from a PolicyInput. */\nexport function toGatePolicyConfig(p: PolicyInput) {\n return {\n checkBlacklist: p.checkBlacklist ?? false,\n allowlistMode: ALLOWLIST_TO_ANCHOR[p.allowlistMode ?? \"off\"],\n requireSas: !!p.sas,\n sasCredential: p.sas?.credential ?? PublicKey.default,\n sasSchema: p.sas?.schema ?? PublicKey.default,\n minKycLevel: p.sas?.minKycLevel ?? 0,\n };\n}\n\n/** The gate's `PolicyArgs` from a PolicyInput; `authority` is the fallback policy admin. */\nfunction toPolicyArgs(p: PolicyInput, authority: PublicKey) {\n const listsOn = !!p.checkBlacklist || (p.allowlistMode ?? \"off\") !== \"off\";\n return {\n authority: p.authority ?? authority,\n issuerProgram: p.issuerProgram ?? (listsOn ? SSS_TOKEN_PROGRAM_ID : PublicKey.default),\n ...toGatePolicyConfig(p),\n };\n}\n\n/** A stored policy as a PolicyInput, so `updatePolicy` can apply changes on top of it. */\nfunction policyToInput(p: GatePolicy): PolicyInput {\n return {\n checkBlacklist: p.checkBlacklist,\n allowlistMode: p.allowlistMode,\n sas: p.requireSas ? { credential: p.sasCredential, schema: p.sasSchema, minKycLevel: p.minKycLevel } : null,\n issuerProgram: p.issuerProgram,\n authority: p.authority,\n };\n}\n\nexport interface GateClientOptions {\n /** Default: the devnet ThawGate deployment. */\n gateProgramId?: PublicKey;\n commitment?: Commitment;\n}\n\nexport class GateClient {\n readonly program: Program<ThawgateGate>;\n readonly gateProgramId: PublicKey;\n private readonly commitment: Commitment;\n\n /**\n * @param connection - RPC connection.\n * @param wallet - Signs and pays. Optional for read-only use (`explain`, `getPolicy`, builders with explicit payers).\n */\n constructor(\n readonly connection: Connection,\n readonly wallet?: GateWallet,\n opts: GateClientOptions = {},\n ) {\n this.gateProgramId = opts.gateProgramId ?? THAWGATE_GATE_PROGRAM_ID;\n this.commitment = opts.commitment ?? \"confirmed\";\n const provider = wallet\n ? new AnchorProvider(connection, wallet, { commitment: this.commitment, preflightCommitment: this.commitment })\n : ({ connection, publicKey: PublicKey.default } as unknown as AnchorProvider);\n this.program = new Program<ThawgateGate>({ ...(GATE_IDL as ThawgateGate), address: this.gateProgramId.toBase58() }, provider);\n }\n\n private me(what: string): PublicKey {\n if (!this.wallet) throw new Error(`${what} needs a wallet (or an explicit payer/authority)`);\n return this.wallet.publicKey;\n }\n\n /** `[\"policy\", mint]` under the gate. */\n policyAddress(mint: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync([Buffer.from(\"policy\"), mint.toBuffer()], this.gateProgramId)[0];\n }\n\n /** The mint's Token ACL config (freeze authority, gating program, permissionless flags), or null. */\n getMintConfig(mint: PublicKey): Promise<MintConfig | null> {\n return fetchMintConfig(this.connection, mint);\n }\n\n /** The mint's ThawGate policy, or null if it has none. */\n async getPolicy(mint: PublicKey): Promise<GatePolicy | null> {\n const address = this.policyAddress(mint);\n const p = await this.program.account.gatePolicy.fetchNullable(address);\n if (!p) return null;\n return {\n address,\n version: p.version,\n mint: p.mint,\n authority: p.authority,\n issuerProgram: p.issuerProgram,\n checkBlacklist: p.checkBlacklist,\n allowlistMode: allowlistFromAnchor(p.allowlistMode as Record<string, unknown>),\n requireSas: p.requireSas,\n sasCredential: p.sasCredential,\n sasSchema: p.sasSchema,\n minKycLevel: p.minKycLevel,\n };\n }\n\n private metasAccounts(mint: PublicKey) {\n return {\n policy: this.policyAddress(mint),\n mint,\n thawExtraMetas: findThawExtraMetasPda(mint, this.gateProgramId),\n freezeExtraMetas: findFreezeExtraMetasPda(mint, this.gateProgramId),\n systemProgram: SystemProgram.programId,\n };\n }\n\n /** Refuses mints whose Token ACL freeze authority is sss-token's config PDA: those get their policy from `enable_token_acl`. */\n private async freezeAuthorityOf(mint: PublicKey): Promise<MintConfig> {\n const config = await fetchMintConfig(this.connection, mint);\n if (!config) throw new Error(`mint ${mint.toBase58()} has no Token ACL MintConfig: create one with Token ACL's create_config first`);\n if (config.freezeAuthority.equals(findConfigPda(mint, SSS_TOKEN_PROGRAM_ID)[0])) {\n throw new Error(\"this mint's Token ACL freeze authority is sss-token's config PDA: sss-token's enable_token_acl creates its policy; change it with updatePolicy\");\n }\n return config;\n }\n\n /**\n * Create the mint's policy and write both extra-metas lists. Signed by the Token ACL freeze authority of the mint\n * (not for sss-token mints: `enableTokenAcl` does this there). The gating program is not switched; `swapGate` does both.\n */\n async initPolicy(mint: PublicKey, policy: PolicyInput, opts: { freezeAuthority?: PublicKey; payer?: PublicKey } = {}): Promise<TransactionInstruction[]> {\n const config = await this.freezeAuthorityOf(mint);\n const freezeAuthority = opts.freezeAuthority ?? this.me(\"initPolicy\");\n if (!config.freezeAuthority.equals(freezeAuthority)) {\n throw new Error(`${freezeAuthority.toBase58()} is not the mint's Token ACL freeze authority (${config.freezeAuthority.toBase58()})`);\n }\n const payer = opts.payer ?? this.wallet?.publicKey ?? freezeAuthority;\n const ix = await this.program.methods\n .initPolicy(toPolicyArgs(policy, payer) as never)\n .accountsStrict({ freezeAuthority, payer, mintConfig: findMintConfigPda(mint), ...this.metasAccounts(mint) })\n .instruction();\n return [ix];\n }\n\n /**\n * Change the policy and rewrite both extra-metas lists. `changes` apply on top of the stored policy (`sas: null`\n * turns SAS off). Signed by the policy authority: the issuer's wallet on sss-token mints.\n */\n async updatePolicy(mint: PublicKey, changes: PolicyInput, opts: { authority?: PublicKey; payer?: PublicKey } = {}): Promise<TransactionInstruction[]> {\n const current = await this.getPolicy(mint);\n if (!current) throw new Error(`mint ${mint.toBase58()} has no ThawGate policy`);\n const authority = opts.authority ?? this.wallet?.publicKey ?? current.authority;\n const merged: PolicyInput = { ...policyToInput(current), ...changes };\n const ix = await this.program.methods\n .updatePolicy(toPolicyArgs(merged, current.authority) as never)\n .accountsStrict({ authority, payer: opts.payer ?? authority, ...this.metasAccounts(mint) })\n .instruction();\n return [ix];\n }\n\n /** Rewrite both extra-metas lists from the stored policy (idempotent). Signed by the policy authority. */\n async setupExtraMetas(mint: PublicKey, opts: { authority?: PublicKey; payer?: PublicKey } = {}): Promise<TransactionInstruction[]> {\n const current = await this.getPolicy(mint);\n if (!current) throw new Error(`mint ${mint.toBase58()} has no ThawGate policy`);\n const authority = opts.authority ?? this.wallet?.publicKey ?? current.authority;\n const ix = await this.program.methods\n .setupExtraMetas()\n .accountsStrict({ authority, payer: opts.payer ?? authority, ...this.metasAccounts(mint) })\n .instruction();\n return [ix];\n }\n\n /**\n * Move an existing Token ACL mint (e.g. on the ABL gate) to ThawGate in one transaction: create the policy (or\n * rewrite it if it exists), `set_gating_program` to ThawGate, and enable permissionless thaw and freeze if either\n * is off. Signed by the mint's Token ACL freeze authority.\n *\n * Token ACL clients that find the gate through the mint's `token_acl` metadata field (@token-acl/sdk's `*FromMint`\n * builders) would keep resolving the old gate's accounts, so the field is updated too when it names another gate.\n * That needs the metadata update authority (`metadataAuthority`, default the freeze authority); pass\n * `skipMetadata: true` to leave it.\n */\n async swapGate(\n mint: PublicKey,\n policy: PolicyInput,\n opts: { freezeAuthority?: PublicKey; payer?: PublicKey; metadataAuthority?: PublicKey; skipMetadata?: boolean } = {},\n ): Promise<TransactionInstruction[]> {\n const config = await this.freezeAuthorityOf(mint);\n const authority = opts.freezeAuthority ?? this.me(\"swapGate\");\n const payer = opts.payer ?? this.wallet?.publicKey ?? authority;\n const ixs = (await this.getPolicy(mint))\n ? await this.updatePolicy(mint, policy, { authority, payer })\n : await this.initPolicy(mint, policy, { freezeAuthority: authority, payer });\n if (!config.gatingProgram.equals(this.gateProgramId)) ixs.push(setGatingProgramIx({ authority, mint, gatingProgram: this.gateProgramId }));\n if (!config.enablePermissionlessThaw || !config.enablePermissionlessFreeze) {\n ixs.push(togglePermissionlessIx({ authority, mint, freeze: true, thaw: true }));\n }\n if (!opts.skipMetadata) ixs.push(...(await this.tokenAclMetadataIxs(mint, opts.metadataAuthority ?? authority, payer)));\n return ixs;\n }\n\n /** Point the mint's `token_acl` metadata field at this gate, if the mint has the field and it names another program. */\n private async tokenAclMetadataIxs(mint: PublicKey, updateAuthority: PublicKey, payer: PublicKey): Promise<TransactionInstruction[]> {\n const gate = this.gateProgramId.toBase58();\n const meta = await getTokenMetadata(this.connection, mint, this.commitment, TOKEN_2022_PROGRAM_ID).catch(() => null);\n const current = meta?.additionalMetadata.find(([k]) => k === TOKEN_ACL_METADATA_KEY)?.[1];\n if (!meta || current === undefined || current === gate) return [];\n if (!meta.updateAuthority?.equals(updateAuthority)) {\n throw new Error(\n `the mint's \"${TOKEN_ACL_METADATA_KEY}\" metadata names ${current}; its update authority ${meta.updateAuthority?.toBase58() ?? \"(none)\"} must sign ` +\n \"to point it at ThawGate (pass metadataAuthority), or pass skipMetadata: true\",\n );\n }\n const ixs: TransactionInstruction[] = [];\n const grow = Buffer.byteLength(gate) - Buffer.byteLength(current);\n if (grow > 0) {\n const info = (await this.connection.getAccountInfo(mint))!;\n const need = (await this.connection.getMinimumBalanceForRentExemption(info.data.length + grow)) - info.lamports;\n if (need > 0) ixs.push(SystemProgram.transfer({ fromPubkey: payer, toPubkey: mint, lamports: need }));\n }\n ixs.push(createUpdateFieldInstruction({ programId: TOKEN_2022_PROGRAM_ID, metadata: mint, updateAuthority, field: TOKEN_ACL_METADATA_KEY, value: gate }));\n return ixs;\n }\n\n /** The owner's associated token account for a Token-2022 mint (off-curve owners allowed). */\n ata(mint: PublicKey, owner: PublicKey): PublicKey {\n return getAssociatedTokenAddressSync(mint, owner, true, TOKEN_2022_PROGRAM_ID);\n }\n\n /**\n * Create the owner's ATA if missing, then thaw it permissionlessly through the gate (idempotent: a thawed account\n * stays as is). Anyone can pay; the owner doesn't sign. If the gate would deny, the transaction fails: call\n * `explain` first for the reason.\n */\n async createAtaAndThaw(mint: PublicKey, owner: PublicKey, opts: { payer?: PublicKey } = {}): Promise<TransactionInstruction[]> {\n const payer = opts.payer ?? this.me(\"createAtaAndThaw\");\n const tokenAccount = this.ata(mint, owner);\n return [\n createAssociatedTokenAccountIdempotentInstruction(payer, tokenAccount, owner, mint, TOKEN_2022_PROGRAM_ID),\n await permissionlessIx(this.connection, \"thawIdempotent\", { caller: payer, mint, tokenAccount, owner }),\n ];\n }\n\n private async readTokenAccount(address: PublicKey, info?: AccountInfo<Buffer> | null) {\n const raw = info === undefined ? await this.connection.getAccountInfo(address) : info;\n return raw ? unpackAccount(address, raw, TOKEN_2022_PROGRAM_ID) : null;\n }\n\n /**\n * Why may (or can't) this wallet hold the token? Simulates the permissionless instruction that applies, with no\n * signature and no state change:\n * - the wallet's account is missing or frozen: create-ATA + thaw (would it unlock?);\n * - it is thawed: freeze (could anyone freeze it?).\n *\n * The fee payer of the simulation must exist and, for a missing account, afford the ATA rent: `opts.payer`, else the\n * client's wallet, else the policy authority.\n */\n async explain(mint: PublicKey, wallet: PublicKey, opts: { payer?: PublicKey; tokenAccount?: PublicKey } = {}): Promise<Explanation> {\n const tokenAccount = opts.tokenAccount ?? this.ata(mint, wallet);\n const base = { mint, wallet, tokenAccount, simulated: null, gatingProgram: null, verdict: null, logs: [] as string[], code: null };\n const [config, info] = await Promise.all([fetchMintConfig(this.connection, mint), this.connection.getAccountInfo(tokenAccount)]);\n const account = info ? ((await this.readTokenAccount(tokenAccount, info))!.isFrozen ? \"frozen\" : \"thawed\") : \"missing\";\n if (account === \"missing\" && opts.tokenAccount) {\n return { ...base, account, status: \"error\", reason: `Token account ${tokenAccount.toBase58()} does not exist (only the wallet's ATA is created here).` };\n }\n if (!config) {\n return { ...base, account, status: \"not_token_acl\", reason: \"This mint has no Token ACL config, so no gate decides who may hold it.\" };\n }\n const action: GateAction = account === \"thawed\" ? \"freeze\" : \"thaw\";\n const gating = { ...base, account, gatingProgram: config.gatingProgram, simulated: action } as const;\n if (action === \"thaw\" ? !config.enablePermissionlessThaw : !config.enablePermissionlessFreeze) {\n return { ...gating, status: \"permissionless_disabled\", reason: `Permissionless ${action} is turned off for this mint; only its freeze authority can ${action}.` };\n }\n\n const payer = opts.payer ?? this.wallet?.publicKey ?? (await this.getPolicy(mint))?.authority ?? wallet;\n const ixs: TransactionInstruction[] = [];\n if (account === \"missing\") ixs.push(createAssociatedTokenAccountIdempotentInstruction(payer, tokenAccount, wallet, mint, TOKEN_2022_PROGRAM_ID));\n const kind: PermissionlessKind = action;\n ixs.push(await permissionlessIx(this.connection, kind, { caller: payer, mint, tokenAccount, owner: wallet, mintConfig: config }));\n\n const sim = await this.simulate(ixs, payer);\n const verdict = classifyGateLogs(sim.logs, sim.err === null, action, { gateId: this.gateProgramId.toBase58(), errorCode: sim.errorCode });\n const result = { ...gating, verdict, logs: sim.logs };\n const foreign = !config.gatingProgram.equals(this.gateProgramId);\n if (verdict.outcome === \"failed\") {\n const hint = sim.payerMissing ? ` The fee payer ${payer.toBase58()} has no SOL on this cluster: pass { payer }.` : \"\";\n return { ...result, status: \"error\", reason: verdict.reason + hint };\n }\n if (foreign) {\n // Another gating program: its logs carry no ThawGate codes, so report only the outcome.\n const ok = verdict.outcome === \"allowed\";\n const status = action === \"thaw\" ? (ok ? \"can_unlock\" : \"denied\") : ok ? \"freezable\" : \"compliant\";\n return { ...result, status, reason: `The mint's gating program ${config.gatingProgram.toBase58()} (not ThawGate) ${ok ? \"allows\" : \"refuses\"} a permissionless ${action}; it logs no ThawGate reason codes.` };\n }\n const code = verdict.outcome === \"allowed\" || verdict.outcome === \"denied\" ? verdict.code : null;\n const status = action === \"thaw\" ? (verdict.outcome === \"denied\" ? \"denied\" : \"can_unlock\") : verdict.outcome === \"allowed\" ? \"freezable\" : \"compliant\";\n return { ...result, status, code, reason: verdict.reason };\n }\n\n /**\n * Freeze `tokenAccount` permissionlessly if, and only if, the gate allows it (the policy flags its owner). Simulates\n * first and sends only on `TG:ALLOW`, so a compliant holder costs no fee. Needs a wallet: it signs and pays.\n */\n async freezeIfInvalid(tokenAccount: PublicKey): Promise<FreezeResult> {\n const caller = this.me(\"freezeIfInvalid\");\n const acc = await this.readTokenAccount(tokenAccount);\n if (!acc) throw new Error(`token account ${tokenAccount.toBase58()} does not exist`);\n if (acc.isFrozen) return { frozen: true, alreadyFrozen: true, code: null, reason: \"Already frozen.\" };\n const ix = await permissionlessIx(this.connection, \"freezeIdempotent\", { caller, mint: acc.mint, tokenAccount, owner: acc.owner });\n const sim = await this.simulate([ix], caller);\n const verdict = classifyGateLogs(sim.logs, sim.err === null, \"freeze\", { gateId: this.gateProgramId.toBase58(), errorCode: sim.errorCode });\n switch (verdict.outcome) {\n case \"skipped\":\n return { frozen: true, alreadyFrozen: true, code: null, reason: verdict.reason };\n case \"denied\":\n return { frozen: false, alreadyFrozen: false, code: verdict.code, reason: verdict.reason };\n case \"failed\":\n return { frozen: false, alreadyFrozen: false, code: null, reason: verdict.reason };\n case \"allowed\": {\n const signature = await this.send([ix]);\n return { frozen: true, alreadyFrozen: false, code: verdict.code, reason: verdict.reason, signature };\n }\n }\n }\n\n /** Simulate without signatures. `payerMissing` = the fee payer account doesn't exist. */\n async simulate(ixs: TransactionInstruction[], payer: PublicKey): Promise<{ err: unknown; logs: string[]; errorCode?: number; payerMissing: boolean; unitsConsumed?: number }> {\n const { blockhash } = await this.connection.getLatestBlockhash(this.commitment);\n const message = new TransactionMessage({ payerKey: payer, recentBlockhash: blockhash, instructions: ixs }).compileToV0Message();\n const { value } = await this.connection.simulateTransaction(new VersionedTransaction(message), {\n sigVerify: false,\n replaceRecentBlockhash: true,\n commitment: this.commitment,\n });\n const err = value.err ?? null;\n const custom = (err as { InstructionError?: [number, unknown] } | null)?.InstructionError?.[1];\n const errorCode = typeof custom === \"object\" && custom !== null && \"Custom\" in custom ? Number((custom as { Custom: number }).Custom) : undefined;\n return { err, logs: value.logs ?? [], errorCode, payerMissing: err === \"AccountNotFound\", unitsConsumed: value.unitsConsumed };\n }\n\n /**\n * Sign with the client's wallet, then with `signers`, send, and confirm. Returns the signature.\n *\n * The wallet signs first: Phantom asks for that order on multi-signer transactions (a wallet may change the\n * transaction while signing, which would void signatures made before it). Anchor's `sendAndConfirm` signs the\n * other way round, so it gets no signers here and a wallet that adds them after the real wallet has signed.\n */\n async send(ixs: TransactionInstruction[], signers: Signer[] = []): Promise<string> {\n this.me(\"send\");\n const wallet = this.wallet!;\n const provider = this.program.provider as AnchorProvider;\n if (signers.length === 0) return provider.sendAndConfirm(new Transaction().add(...ixs), [], { commitment: this.commitment });\n const walletFirst: GateWallet = {\n publicKey: wallet.publicKey,\n signTransaction: async (tx) => {\n const signed = await wallet.signTransaction(tx);\n if (signed instanceof VersionedTransaction) signed.sign(signers);\n else (signed as Transaction).partialSign(...signers);\n return signed;\n },\n signAllTransactions: (txs) => Promise.all(txs.map((tx) => walletFirst.signTransaction(tx))),\n };\n return new AnchorProvider(this.connection, walletFirst, provider.opts).sendAndConfirm(new Transaction().add(...ixs), [], { commitment: this.commitment });\n }\n}\n","/**\n * @module types\n * @description TypeScript type definitions for the Solana Stablecoin Standard (SSS) SDK.\n *\n * These types mirror the on-chain Anchor program state and instruction arguments.\n */\n\nimport { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\n// ============================================================================\n// Enums\n// ============================================================================\n\n/**\n * Role types matching the on-chain RoleType enum.\n * Numeric values match the Anchor discriminator bytes.\n */\nexport enum RoleType {\n MasterAuthority = 0,\n Minter = 1,\n Burner = 2,\n Pauser = 3,\n Blacklister = 4,\n Seizer = 5,\n}\n\n/**\n * Minter quota period matching the on-chain QuotaPeriod enum.\n */\nexport enum QuotaPeriod {\n Daily = 0,\n Weekly = 1,\n Monthly = 2,\n Lifetime = 3,\n}\n\n/**\n * Supported SSS preset tiers.\n */\nexport enum SSSPreset {\n /** Basic stablecoin — mint, burn, freeze, pause, roles */\n SSS1 = \"SSS-1\",\n /** Enhanced compliance — adds blacklist, seize, transfer hook */\n SSS2 = \"SSS-2\",\n /** Private stablecoin — confidential transfers + allowlist */\n SSS3 = \"SSS-3\",\n /** Token ACL mint gated by ThawGate (no transfer hook); the default for new mints */\n SSS_ACL = \"SSS-ACL\",\n /** Token ACL plus the SSS transfer hook */\n SSS_BOTH = \"SSS-Both\",\n}\n\n/**\n * How a mint enforces compliance (`StablecoinConfig.compliance_mode`, immutable).\n */\nexport enum ComplianceMode {\n /** Transfer hook on every transfer (legacy SSS-2). */\n Hook = 0,\n /** Token ACL: frozen-by-default accounts thawed through the ThawGate gate; no hook. */\n Acl = 1,\n /** Token ACL and the transfer hook. */\n Both = 2,\n}\n\n// ============================================================================\n// Account State Types\n// ============================================================================\n\n/**\n * On-chain StablecoinConfig account data.\n */\nexport interface StablecoinConfig {\n /** The MasterAuthority who controls this stablecoin. */\n authority: PublicKey;\n /** The Token-2022 mint address. */\n mint: PublicKey;\n /** Human-readable name (max 32 chars). */\n name: string;\n /** Ticker symbol (max 10 chars). */\n symbol: string;\n /** Metadata URI (max 200 chars). */\n uri: string;\n /** Number of decimal places. */\n decimals: number;\n /** Whether permanent delegate extension is enabled (immutable). */\n enablePermanentDelegate: boolean;\n /** Whether transfer hook extension is enabled (immutable). */\n enableTransferHook: boolean;\n /** Whether new accounts are frozen by default (immutable). */\n defaultAccountFrozen: boolean;\n /** Whether token operations are currently paused. */\n paused: boolean;\n /** Total tokens minted (cumulative). */\n totalMinted: BN;\n /** Total tokens burned (cumulative). */\n totalBurned: BN;\n /** PDA bump seed. */\n bump: number;\n /** A `ComplianceMode` value (immutable; decodes as 0 = Hook on configs created before S6). */\n complianceMode: number;\n}\n\n/**\n * On-chain RoleRecord account data.\n */\nexport interface RoleRecord {\n /** The mint this role is associated with. */\n mint: PublicKey;\n /** The key that holds this role. */\n holder: PublicKey;\n /** The type of role. */\n role: RoleType;\n /** Whether the role is currently active. */\n active: boolean;\n /** Unix timestamp when the role was granted. */\n grantedAt: BN;\n /** PDA bump seed. */\n bump: number;\n}\n\n/**\n * On-chain MinterQuota account data.\n */\nexport interface MinterQuota {\n /** The mint this quota applies to. */\n mint: PublicKey;\n /** The minter this quota belongs to. */\n minter: PublicKey;\n /** Maximum amount that can be minted per period. */\n limit: BN;\n /** Amount already minted in current period. */\n used: BN;\n /** The quota period type. */\n period: QuotaPeriod;\n /** PDA bump seed. */\n bump: number;\n}\n\n/**\n * On-chain BlacklistEntry account data (SSS-2 only).\n */\nexport interface BlacklistEntry {\n /** The mint this entry applies to. */\n mint: PublicKey;\n /** The blacklisted wallet address. */\n target: PublicKey;\n /** Human-readable reason for blacklisting. */\n reason: string;\n /** Unix timestamp when added. */\n addedAt: BN;\n /** The operator who added the entry. */\n addedBy: PublicKey;\n /** Whether the entry is currently active. */\n active: boolean;\n /** PDA bump seed. */\n bump: number;\n}\n\n/**\n * On-chain PauseState account data.\n */\nexport interface PauseState {\n /** The mint this pause state applies to. */\n mint: PublicKey;\n /** Whether token operations are paused. */\n paused: boolean;\n /** Unix timestamp when last paused (0 if never). */\n pausedAt: BN;\n /** The operator who last paused. */\n pausedBy: PublicKey;\n /** PDA bump seed. */\n bump: number;\n}\n\n// ============================================================================\n// Instruction Argument Types\n// ============================================================================\n\n/**\n * Arguments for the initialize instruction.\n */\nexport interface InitializeArgs {\n /** Human-readable name (max 32 chars). */\n name: string;\n /** Ticker symbol (max 10 chars). */\n symbol: string;\n /** Metadata URI (max 200 chars). */\n uri: string;\n /** Number of decimal places. */\n decimals: number;\n /** Enable permanent delegate extension (SSS-2). */\n enablePermanentDelegate: boolean;\n /** Enable transfer hook extension (SSS-2). */\n enableTransferHook: boolean;\n /** Freeze new accounts by default. */\n defaultAccountFrozen: boolean;\n /** Transfer hook program ID (required if enableTransferHook=true). */\n hookProgramId?: PublicKey;\n /** Enable confidential transfers (SSS-3). */\n enableConfidentialTransfers?: boolean;\n /** Enable allowlist-based access control (SSS-3). */\n enableAllowlist?: boolean;\n /**\n * How the mint enforces compliance (default `ComplianceMode.Hook`, the pre-S6 behavior). `Acl` and `Both` need\n * `defaultAccountFrozen`; `Acl` takes no hook and `Both` requires it. Call `enable_token_acl` after initialize.\n */\n complianceMode?: ComplianceMode;\n}\n\n/**\n * Arguments for updating a minter's quota.\n */\nexport interface UpdateMinterArgs {\n /** The minter's public key. */\n minter: PublicKey;\n /** Maximum mint amount per period. */\n limit: BN;\n /** The quota period. */\n period: QuotaPeriod;\n}\n\n/**\n * Arguments for granting/revoking a role.\n */\nexport interface UpdateRolesArgs {\n /** The key to grant/revoke the role for. */\n holder: PublicKey;\n /** The role type. */\n role: RoleType;\n /** Whether to activate or deactivate. */\n active: boolean;\n}\n\n/**\n * Arguments for adding a wallet to the blacklist.\n */\nexport interface AddToBlacklistArgs {\n /** The wallet to blacklist. */\n target: PublicKey;\n /** Human-readable reason (max 200 chars). */\n reason: string;\n}\n\n// ============================================================================\n// SDK Configuration Types\n// ============================================================================\n\n/**\n * Configuration for initializing the SDK client.\n */\nexport interface SSSClientConfig {\n /** Solana RPC endpoint URL. */\n rpcUrl: string;\n /** Commitment level for transactions. */\n commitment?: \"processed\" | \"confirmed\" | \"finalized\";\n /** Whether to skip preflight checks. */\n skipPreflight?: boolean;\n /** SSS-Token program ID (default: the devnet deployment, `SSS_TOKEN_PROGRAM_ID`). */\n programId?: PublicKey;\n /** Transfer Hook program ID (default: the devnet deployment, `TRANSFER_HOOK_PROGRAM_ID`). */\n hookProgramId?: PublicKey;\n /** ThawGate gate program ID (default: the devnet deployment, `THAWGATE_GATE_PROGRAM_ID`). */\n gateProgramId?: PublicKey;\n}\n\n/**\n * Result type for SDK operations that submit transactions.\n */\nexport interface TransactionResult {\n /** The transaction signature. */\n signature: string;\n /** The slot the transaction was confirmed in. */\n slot?: number;\n /** Any useful data returned from the transaction. */\n data?: Record<string, unknown>;\n}\n\n/**\n * Options for transaction submission.\n */\nexport interface TransactionOptions {\n /** Whether to skip preflight simulation. */\n skipPreflight?: boolean;\n /** Maximum retries for transaction confirmation. */\n maxRetries?: number;\n /** Additional signers beyond the payer. */\n additionalSigners?: unknown[];\n}\n\n// ============================================================================\n// Event Types\n// ============================================================================\n\n/**\n * Event emitted when a stablecoin is initialized.\n */\nexport interface StablecoinInitializedEvent {\n mint: PublicKey;\n authority: PublicKey;\n name: string;\n symbol: string;\n decimals: number;\n enablePermanentDelegate: boolean;\n enableTransferHook: boolean;\n defaultAccountFrozen: boolean;\n timestamp: BN;\n}\n\n/**\n * Event emitted when authority is transferred.\n */\nexport interface AuthorityTransferredEvent {\n mint: PublicKey;\n oldAuthority: PublicKey;\n newAuthority: PublicKey;\n timestamp: BN;\n}\n\n/**\n * Event emitted when tokens are seized.\n */\nexport interface TokensSeizedEvent {\n mint: PublicKey;\n source: PublicKey;\n treasury: PublicKey;\n amount: BN;\n seizer: PublicKey;\n timestamp: BN;\n}\n","/**\n * @module presets/sssAcl\n * @description SSS-ACL preset — a Token ACL (sRFC 37) stablecoin gated by ThawGate. The default for new mints.\n *\n * Accounts start frozen (DefaultAccountState) and holders thaw themselves through the ThawGate gate, which checks\n * the issuer's blacklist/allowlist and, optionally, a SAS KYC credential once per account. Transfers carry no\n * transfer hook. Blacklist, seize (permanent delegate) and pause (Token-2022 Pausable) work through Token ACL.\n * After `initialize`, the master authority calls `enable_token_acl` to create the Token ACL config and the policy.\n */\n\nimport type { InitializeArgs } from \"../types\";\nimport { ComplianceMode } from \"../types\";\n\n/**\n * Default initialization arguments for an SSS-ACL stablecoin.\n *\n * @param name - Stablecoin name\n * @param symbol - Ticker symbol\n * @param uri - Metadata URI\n * @param decimals - Decimal places (default: 6)\n * @returns InitializeArgs configured for SSS-ACL\n */\nexport function sssAclPreset(\n name: string,\n symbol: string,\n uri: string,\n decimals = 6,\n): InitializeArgs {\n return {\n name,\n symbol,\n uri,\n decimals,\n enablePermanentDelegate: true,\n enableTransferHook: false,\n defaultAccountFrozen: true,\n hookProgramId: undefined,\n complianceMode: ComplianceMode.Acl,\n };\n}\n\n/**\n * SSS-ACL feature flags for documentation and validation.\n */\nexport const SSS_ACL_FEATURES = {\n mint: true,\n burn: true,\n freeze: true,\n pause: true,\n roles: true,\n blacklist: true,\n seize: true,\n transferHook: false,\n permanentDelegate: true,\n tokenAcl: true,\n defaultAccountFrozen: true,\n} as const;\n","/**\n * @module wallet\n * @description An Anchor-style wallet from a Keypair, for scripts and servers (browser apps pass their wallet adapter).\n */\n\nimport { Keypair, Transaction, VersionedTransaction } from \"@solana/web3.js\";\n\nexport interface KeypairWallet {\n publicKey: Keypair[\"publicKey\"];\n payer: Keypair;\n signTransaction<T extends Transaction | VersionedTransaction>(tx: T): Promise<T>;\n signAllTransactions<T extends Transaction | VersionedTransaction>(txs: T[]): Promise<T[]>;\n}\n\nexport function keypairWallet(keypair: Keypair): KeypairWallet {\n const sign = <T extends Transaction | VersionedTransaction>(tx: T): T => {\n if (tx instanceof VersionedTransaction) tx.sign([keypair]);\n else tx.partialSign(keypair);\n return tx;\n };\n return {\n publicKey: keypair.publicKey,\n payer: keypair,\n signTransaction: async (tx) => sign(tx),\n signAllTransactions: async (txs) => txs.map(sign),\n };\n}\n","/**\n * @module base/token\n * @description Core token operations — initialize, mint, burn, freeze, thaw, pause, unpause.\n *\n * These functions build Anchor instruction transactions.\n * The caller is responsible for signing and sending.\n */\n\nimport {\n PublicKey,\n SystemProgram,\n SYSVAR_RENT_PUBKEY,\n Keypair,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Program } from \"@coral-xyz/anchor\";\nimport BN from \"bn.js\";\nimport {\n TOKEN_2022_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport {\n findConfigPda,\n findPauseStatePda,\n findRolePda,\n findQuotaPda,\n findReserveAttestationPda,\n} from \"../pda\";\nimport { ComplianceMode, RoleType } from \"../types\";\nimport type { InitializeArgs, TransactionResult } from \"../types\";\nimport { parseError } from \"../errors\";\n\n/**\n * Initializes a new stablecoin.\n *\n * Creates the Token-2022 mint with configured extensions,\n * plus StablecoinConfig, PauseState, and MasterAuthority PDAs.\n *\n * @param program - The Anchor program instance\n * @param authority - The authority keypair (becomes MasterAuthority)\n * @param args - Initialization arguments (use presets for defaults)\n * @param mintKeypair - Optional mint keypair (generated if not provided)\n * @returns Transaction result with mint address\n */\nexport async function initialize(\n program: Program,\n authority: PublicKey,\n args: InitializeArgs,\n mintKeypair?: Keypair,\n): Promise<{ instructions: TransactionInstruction[]; mint: PublicKey; mintKeypair: Keypair }> {\n const mint = mintKeypair ?? Keypair.generate();\n const mintKey = mint.publicKey;\n const programId = program.programId;\n\n const [configPda] = findConfigPda(mintKey, programId);\n const [pausePda] = findPauseStatePda(mintKey, programId);\n const [masterRolePda] = findRolePda(\n mintKey,\n authority,\n RoleType.MasterAuthority,\n programId,\n );\n\n try {\n const ix = await program.methods\n .initialize({\n name: args.name,\n symbol: args.symbol,\n uri: args.uri,\n decimals: args.decimals,\n enablePermanentDelegate: args.enablePermanentDelegate,\n enableTransferHook: args.enableTransferHook,\n defaultAccountFrozen: args.defaultAccountFrozen,\n hookProgramId: args.hookProgramId ?? null,\n enableConfidentialTransfers: args.enableConfidentialTransfers ?? false,\n enableAllowlist: args.enableAllowlist ?? false,\n complianceMode: args.complianceMode ?? ComplianceMode.Hook,\n })\n .accounts({\n authority,\n mint: mintKey,\n config: configPda,\n pauseState: pausePda,\n masterRole: masterRolePda,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .instruction();\n\n return { instructions: [ix], mint: mintKey, mintKeypair: mint };\n } catch (error) {\n throw parseError(error);\n }\n}\n\n/**\n * Mints tokens to a recipient.\n *\n * @param program - The Anchor program instance\n * @param mint - The Token-2022 mint address\n * @param minter - The minter's public key (must have Minter role)\n * @param recipient - The recipient's wallet address\n * @param amount - Amount to mint (raw, not decimal-adjusted)\n * @returns Transaction instructions\n */\nexport async function mintTokens(\n program: Program,\n mint: PublicKey,\n minter: PublicKey,\n recipient: PublicKey,\n amount: BN,\n): Promise<TransactionInstruction[]> {\n const programId = program.programId;\n const [configPda] = findConfigPda(mint, programId);\n const [pausePda] = findPauseStatePda(mint, programId);\n const [minterRolePda] = findRolePda(mint, minter, RoleType.Minter, programId);\n const [quotaPda] = findQuotaPda(mint, minter, programId);\n\n const recipientAta = getAssociatedTokenAddressSync(\n mint,\n recipient,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n try {\n const ix = await program.methods\n .mintTokens(amount)\n .accounts({\n minter,\n config: configPda,\n pauseState: pausePda,\n minterRole: minterRolePda,\n minterQuota: quotaPda,\n mint,\n recipientTokenAccount: recipientAta,\n recipient,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n reserveAttestation: findReserveAttestationPda(mint, programId)[0],\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n}\n\n/**\n * Burns tokens from the burner's account.\n *\n * @param program - The Anchor program instance\n * @param mint - The Token-2022 mint address\n * @param burner - The burner's public key (must have Burner role)\n * @param amount - Amount to burn (raw, not decimal-adjusted)\n * @returns Transaction instructions\n */\nexport async function burnTokens(\n program: Program,\n mint: PublicKey,\n burner: PublicKey,\n amount: BN,\n): Promise<TransactionInstruction[]> {\n const programId = program.programId;\n const [configPda] = findConfigPda(mint, programId);\n const [pausePda] = findPauseStatePda(mint, programId);\n const [burnerRolePda] = findRolePda(mint, burner, RoleType.Burner, programId);\n\n const burnerAta = getAssociatedTokenAddressSync(\n mint,\n burner,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n try {\n const ix = await program.methods\n .burnTokens(amount)\n .accounts({\n burner,\n config: configPda,\n pauseState: pausePda,\n burnerRole: burnerRolePda,\n mint,\n burnerTokenAccount: burnerAta,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n}\n\n/**\n * Freezes a target token account.\n *\n * @param program - The Anchor program instance\n * @param mint - The Token-2022 mint address\n * @param operator - The operator's public key (MasterAuthority or Blacklister)\n * @param targetTokenAccount - The token account to freeze\n * @param operatorRole - The role type of the operator\n * @returns Transaction instructions\n */\nexport async function freezeAccount(\n program: Program,\n mint: PublicKey,\n operator: PublicKey,\n targetTokenAccount: PublicKey,\n operatorRole: RoleType.MasterAuthority | RoleType.Blacklister = RoleType.MasterAuthority,\n): Promise<TransactionInstruction[]> {\n const programId = program.programId;\n const [configPda] = findConfigPda(mint, programId);\n const [rolePda] = findRolePda(mint, operator, operatorRole, programId);\n\n try {\n const ix = await program.methods\n .freezeAccount()\n .accounts({\n operator,\n config: configPda,\n operatorRole: rolePda,\n mint,\n targetTokenAccount,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n}\n\n/**\n * Thaws a frozen token account.\n *\n * @param program - The Anchor program instance\n * @param mint - The Token-2022 mint address\n * @param operator - The operator's public key (MasterAuthority or Blacklister)\n * @param targetTokenAccount - The token account to thaw\n * @param operatorRole - The role type of the operator\n * @returns Transaction instructions\n */\nexport async function thawAccount(\n program: Program,\n mint: PublicKey,\n operator: PublicKey,\n targetTokenAccount: PublicKey,\n operatorRole: RoleType.MasterAuthority | RoleType.Blacklister = RoleType.MasterAuthority,\n): Promise<TransactionInstruction[]> {\n const programId = program.programId;\n const [configPda] = findConfigPda(mint, programId);\n const [rolePda] = findRolePda(mint, operator, operatorRole, programId);\n\n try {\n const ix = await program.methods\n .thawAccount()\n .accounts({\n operator,\n config: configPda,\n operatorRole: rolePda,\n mint,\n targetTokenAccount,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n}\n\n/**\n * Pauses all token operations.\n *\n * @param program - The Anchor program instance\n * @param mint - The Token-2022 mint address\n * @param operator - The operator's public key (Pauser or MasterAuthority)\n * @param operatorRole - The role type of the operator\n * @returns Transaction instructions\n */\nexport async function pause(\n program: Program,\n mint: PublicKey,\n operator: PublicKey,\n operatorRole: RoleType.Pauser | RoleType.MasterAuthority = RoleType.Pauser,\n): Promise<TransactionInstruction[]> {\n const programId = program.programId;\n const [configPda] = findConfigPda(mint, programId);\n const [pausePda] = findPauseStatePda(mint, programId);\n const [rolePda] = findRolePda(mint, operator, operatorRole, programId);\n\n try {\n const ix = await program.methods\n .pause()\n .accounts({\n operator,\n config: configPda,\n pauseState: pausePda,\n operatorRole: rolePda,\n // Token ACL modes pause the mint itself (Token-2022 Pausable)\n mint,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n}\n\n/**\n * Resumes all token operations.\n *\n * @param program - The Anchor program instance\n * @param mint - The Token-2022 mint address\n * @param operator - The operator's public key (Pauser or MasterAuthority)\n * @param operatorRole - The role type of the operator\n * @returns Transaction instructions\n */\nexport async function unpause(\n program: Program,\n mint: PublicKey,\n operator: PublicKey,\n operatorRole: RoleType.Pauser | RoleType.MasterAuthority = RoleType.Pauser,\n): Promise<TransactionInstruction[]> {\n const programId = program.programId;\n const [configPda] = findConfigPda(mint, programId);\n const [pausePda] = findPauseStatePda(mint, programId);\n const [rolePda] = findRolePda(mint, operator, operatorRole, programId);\n\n try {\n const ix = await program.methods\n .unpause()\n .accounts({\n operator,\n config: configPda,\n pauseState: pausePda,\n operatorRole: rolePda,\n mint,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n}\n","{\n \"address\": \"HLvhfKVfGfKXVNS9tZ1q7SNS4w9mQmcjre758QFhbZDZ\",\n \"metadata\": {\n \"name\": \"sss_token\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Solana Stablecoin Standard — Core Token Program\"\n },\n \"docs\": [\n \"The SSS-Token program.\"\n ],\n \"instructions\": [\n {\n \"name\": \"add_to_allowlist_v3\",\n \"docs\": [\n \"Adds a wallet to the allowlist (SSS-3 only), or reactivates its inactive entry.\",\n \"\",\n \"Feature-gated: requires enable_allowlist.\",\n \"Only MasterAuthority can manage the allowlist.\"\n ],\n \"discriminator\": [\n 233,\n 58,\n 198,\n 167,\n 13,\n 130,\n 79,\n 217\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"authority_role\"\n },\n {\n \"name\": \"wallet\",\n \"docs\": [\n \"The wallet to add to the allowlist.\"\n ]\n },\n {\n \"name\": \"allowlist_entry\",\n \"docs\": [\n \"Created on the wallet's first add, reactivated after a removal (S15).\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 97,\n 108,\n 108,\n 111,\n 119,\n 108,\n 105,\n 115,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"wallet\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"add_to_blacklist\",\n \"docs\": [\n \"Adds an address to the blacklist (SSS-2 and Token ACL modes).\",\n \"\",\n \"Feature-gated: requires compliance (enable_transfer_hook, or compliance_mode Acl/Both).\",\n \"Creates the BlacklistEntry (or reactivates an inactive one) and freezes the target's token account.\"\n ],\n \"discriminator\": [\n 90,\n 115,\n 98,\n 231,\n 173,\n 119,\n 117,\n 176\n ],\n \"accounts\": [\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The blacklister operator — must have Blacklister role.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"operator_role\",\n \"docs\": [\n \"The operator's Blacklister role record.\"\n ]\n },\n {\n \"name\": \"blacklist_entry\",\n \"docs\": [\n \"The blacklist entry PDA: created on the wallet's first blacklisting, reactivated after a removal (S15).\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 98,\n 108,\n 97,\n 99,\n 107,\n 108,\n 105,\n 115,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"target\"\n }\n ]\n }\n },\n {\n \"name\": \"target\",\n \"docs\": [\n \"The target wallet being blacklisted.\"\n ]\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The Token-2022 mint account.\"\n ]\n },\n {\n \"name\": \"target_token_account\",\n \"docs\": [\n \"The target's token account to be frozen. It must belong to `target`, so an entry for one wallet can't\",\n \"freeze another wallet's account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program for freeze CPI.\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program for account creation.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_acl_program\",\n \"docs\": [\n \"Token ACL program (freezes once Token ACL holds the mint's freeze authority).\"\n ],\n \"address\": \"TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP\"\n },\n {\n \"name\": \"mint_config\",\n \"docs\": [\n \"The mint's Token ACL MintConfig PDA; may not exist (Hook-mode mints).\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 77,\n 73,\n 78,\n 84,\n 95,\n 67,\n 79,\n 78,\n 70,\n 73,\n 71\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"account\",\n \"path\": \"token_acl_program\"\n }\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"reason\",\n \"type\": \"string\"\n }\n ]\n },\n {\n \"name\": \"apply_pending_balance\",\n \"docs\": [\n \"Applies pending confidential balance credits (SSS-3 only).\",\n \"\",\n \"Feature-gated: requires enable_confidential_transfers.\"\n ],\n \"discriminator\": [\n 69,\n 71,\n 130,\n 63,\n 82,\n 162,\n 113,\n 185\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"docs\": [\n \"The wallet owner applying their pending balance.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"token_account\",\n \"docs\": [\n \"The token account to apply pending balance to.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program.\"\n ]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"attest_reserves\",\n \"docs\": [\n \"Posts the mint's reserves (in the mint's base units), measured at `as_of` (unix seconds).\",\n \"\",\n \"Signed by the attestor. `as_of` may not be in the future or older than the stored one.\"\n ],\n \"discriminator\": [\n 68,\n 20,\n 40,\n 240,\n 165,\n 2,\n 146,\n 10\n ],\n \"accounts\": [\n {\n \"name\": \"attestor\",\n \"docs\": [\n \"The attestor set by MasterAuthority.\"\n ],\n \"signer\": true,\n \"relations\": [\n \"reserve_attestation\"\n ]\n },\n {\n \"name\": \"reserve_attestation\",\n \"docs\": [\n \"The mint's reserve attestation.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 115,\n 101,\n 114,\n 118,\n 101,\n 95,\n 97,\n 116,\n 116,\n 101,\n 115,\n 116,\n 97,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"reserve_attestation.mint\",\n \"account\": \"ReserveAttestation\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"reserves\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"as_of\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"report_uri\",\n \"type\": \"string\"\n }\n ]\n },\n {\n \"name\": \"burn_tokens\",\n \"docs\": [\n \"Burns tokens from the burner's account.\",\n \"\",\n \"Validates burner role and pause state before burning.\"\n ],\n \"discriminator\": [\n 76,\n 15,\n 51,\n 254,\n 229,\n 215,\n 121,\n 66\n ],\n \"accounts\": [\n {\n \"name\": \"burner\",\n \"docs\": [\n \"The burner — must have an active Burner role.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"pause_state\",\n \"docs\": [\n \"The pause state PDA — checked to ensure operations are not paused.\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 97,\n 117,\n 115,\n 101,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"burner_role\",\n \"docs\": [\n \"The burner's role record PDA — must be an active Burner.\"\n ]\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The Token-2022 mint account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"burner_token_account\",\n \"docs\": [\n \"The burner's token account to burn from.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"burner\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program.\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"configure_confidential_account\",\n \"docs\": [\n \"Configures a token account for confidential transfers (SSS-3 only).\",\n \"\",\n \"Feature-gated: requires enable_confidential_transfers.\"\n ],\n \"discriminator\": [\n 36,\n 212,\n 145,\n 231,\n 191,\n 23,\n 188,\n 119\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"docs\": [\n \"The wallet owner configuring their confidential transfer account.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"token_account\",\n \"docs\": [\n \"The token account to configure for confidential transfers.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program.\"\n ]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"enable_token_acl\",\n \"docs\": [\n \"Puts a Token ACL mode mint under Token ACL with the ThawGate gate and creates its gate policy.\",\n \"\",\n \"Requires compliance_mode Acl or Both and the MasterAuthority. The config PDA signs every CPI.\"\n ],\n \"discriminator\": [\n 223,\n 179,\n 117,\n 163,\n 201,\n 185,\n 222,\n 34\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The master authority; pays for the MintConfig, the policy and its extra-metas lists.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"authority_role\"\n },\n {\n \"name\": \"mint\",\n \"writable\": true,\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"token_acl_program\",\n \"address\": \"TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP\"\n },\n {\n \"name\": \"mint_config\",\n \"docs\": [\n \"Token ACL MintConfig PDA, created by `create_config`.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 77,\n 73,\n 78,\n 84,\n 95,\n 67,\n 79,\n 78,\n 70,\n 73,\n 71\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"account\",\n \"path\": \"token_acl_program\"\n }\n }\n },\n {\n \"name\": \"gate_program\",\n \"address\": \"THAW2daLXyUtCLtTsJWDTKZctiAGmGX4wT1kqKXugUZ\"\n },\n {\n \"name\": \"gate_policy\",\n \"docs\": [\n \"The gate's `GatePolicy`, created by `init_policy`.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 108,\n 105,\n 99,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"account\",\n \"path\": \"gate_program\"\n }\n }\n },\n {\n \"name\": \"thaw_extra_metas\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 104,\n 97,\n 119,\n 95,\n 101,\n 120,\n 116,\n 114,\n 97,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116,\n 95,\n 109,\n 101,\n 116,\n 97,\n 115\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"account\",\n \"path\": \"gate_program\"\n }\n }\n },\n {\n \"name\": \"freeze_extra_metas\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 102,\n 114,\n 101,\n 101,\n 122,\n 101,\n 95,\n 101,\n 120,\n 116,\n 114,\n 97,\n 95,\n 97,\n 99,\n 99,\n 111,\n 117,\n 110,\n 116,\n 95,\n 109,\n 101,\n 116,\n 97,\n 115\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"account\",\n \"path\": \"gate_program\"\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"policy\",\n \"type\": {\n \"defined\": {\n \"name\": \"GatePolicyConfig\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"freeze_account\",\n \"docs\": [\n \"Freezes a target token account.\",\n \"\",\n \"Requires MasterAuthority or Blacklister role.\"\n ],\n \"discriminator\": [\n 253,\n 75,\n 82,\n 133,\n 167,\n 238,\n 43,\n 130\n ],\n \"accounts\": [\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The operator — must have MasterAuthority or Blacklister role.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA (also the freeze authority).\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"operator_role\",\n \"docs\": [\n \"The operator's role record PDA.\",\n \"Must be either MasterAuthority or Blacklister with active status.\"\n ]\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The Token-2022 mint account.\"\n ]\n },\n {\n \"name\": \"target_token_account\",\n \"docs\": [\n \"The target token account to freeze or thaw.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program.\"\n ]\n },\n {\n \"name\": \"token_acl_program\",\n \"docs\": [\n \"Token ACL program (used once Token ACL holds the mint's freeze authority).\"\n ],\n \"address\": \"TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP\"\n },\n {\n \"name\": \"mint_config\",\n \"docs\": [\n \"The mint's Token ACL MintConfig PDA; may not exist (Hook-mode mints).\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 77,\n 73,\n 78,\n 84,\n 95,\n 67,\n 79,\n 78,\n 70,\n 73,\n 71\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"account\",\n \"path\": \"token_acl_program\"\n }\n }\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"Initializes a new stablecoin with Token-2022 extensions.\",\n \"\",\n \"Creates the mint, config PDA, pause state PDA, and master authority role.\",\n \"Extension flags are immutable after this call.\"\n ],\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority who will become the MasterAuthority.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The Token-2022 mint account to be created.\",\n \"This must be a new, uninitialized account.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"pause_state\",\n \"docs\": [\n \"The pause state PDA — initialized to not paused.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 97,\n 117,\n 115,\n 101,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"master_role\",\n \"docs\": [\n \"The MasterAuthority role record PDA for the authority.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program.\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program for account creation.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"docs\": [\n \"Rent sysvar.\"\n ],\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitializeArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"mint_tokens\",\n \"docs\": [\n \"Mints tokens to a recipient.\",\n \"\",\n \"Validates minter role, pause state, quota and the reserve attestation before minting:\",\n \"`mint.supply + amount <= reserves` and `now - as_of <= max_staleness`.\",\n \"Creates recipient ATA if it doesn't exist.\"\n ],\n \"discriminator\": [\n 59,\n 132,\n 24,\n 246,\n 122,\n 39,\n 8,\n 243\n ],\n \"accounts\": [\n {\n \"name\": \"minter\",\n \"docs\": [\n \"The minter — must have an active Minter role.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"pause_state\",\n \"docs\": [\n \"The pause state PDA — checked to ensure operations are not paused.\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 97,\n 117,\n 115,\n 101,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"minter_role\",\n \"docs\": [\n \"The minter's role record PDA — must be an active Minter.\"\n ]\n },\n {\n \"name\": \"minter_quota\",\n \"docs\": [\n \"The minter's quota PDA — tracks usage against limits.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 105,\n 110,\n 116,\n 101,\n 114,\n 95,\n 113,\n 117,\n 111,\n 116,\n 97\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"minter\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The Token-2022 mint account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"recipient_token_account\",\n \"docs\": [\n \"The recipient's associated token account — created if it doesn't exist.\",\n \"or by the token program if it already exists.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"recipient\",\n \"docs\": [\n \"The recipient wallet address.\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program.\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program for ATA creation.\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program for account creation.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"reserve_attestation\",\n \"docs\": [\n \"The mint's reserve attestation (S9). Always passed, so a caller can't skip the check by leaving it out;\",\n \"it may not exist (Hook mode mints that never opted in). The address is checked with the stored bump (S15).\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 115,\n 101,\n 114,\n 118,\n 101,\n 95,\n 97,\n 116,\n 116,\n 101,\n 115,\n 116,\n 97,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"pause\",\n \"docs\": [\n \"Pauses all token operations (mint, burn, transfer).\",\n \"\",\n \"Requires Pauser or MasterAuthority role.\",\n \"Does NOT prevent freeze/thaw/seize.\"\n ],\n \"discriminator\": [\n 211,\n 22,\n 221,\n 251,\n 74,\n 121,\n 193,\n 47\n ],\n \"accounts\": [\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The operator — must have Pauser or MasterAuthority role.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"pause_state\",\n \"docs\": [\n \"The pause state PDA to be updated.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 97,\n 117,\n 115,\n 101,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"operator_role\",\n \"docs\": [\n \"The operator's role record PDA.\",\n \"Must be either Pauser or MasterAuthority with active status.\"\n ]\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The config's mint: Token ACL mode pauses it through Token-2022 Pausable.\"\n ],\n \"writable\": true,\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program (Pausable CPI).\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_from_allowlist_v3\",\n \"docs\": [\n \"Removes a wallet from the allowlist (SSS-3 only).\",\n \"\",\n \"Feature-gated: requires enable_allowlist.\",\n \"Only MasterAuthority can manage the allowlist.\"\n ],\n \"discriminator\": [\n 7,\n 32,\n 13,\n 36,\n 151,\n 42,\n 203,\n 122\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"authority_role\"\n },\n {\n \"name\": \"wallet\"\n },\n {\n \"name\": \"allowlist_entry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 97,\n 108,\n 108,\n 111,\n 119,\n 108,\n 105,\n 115,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"wallet\"\n }\n ]\n }\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_from_blacklist\",\n \"docs\": [\n \"Removes an address from the blacklist (SSS-2 and Token ACL modes).\",\n \"\",\n \"Feature-gated: requires compliance (enable_transfer_hook, or compliance_mode Acl/Both).\",\n \"Deactivates the BlacklistEntry. Does NOT auto-thaw.\"\n ],\n \"discriminator\": [\n 47,\n 105,\n 20,\n 10,\n 165,\n 168,\n 203,\n 219\n ],\n \"accounts\": [\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The blacklister operator — must have Blacklister role.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"operator_role\",\n \"docs\": [\n \"The operator's Blacklister role record.\"\n ]\n },\n {\n \"name\": \"blacklist_entry\",\n \"docs\": [\n \"The blacklist entry PDA to be deactivated.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 98,\n 108,\n 97,\n 99,\n 107,\n 108,\n 105,\n 115,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"target\"\n }\n ]\n }\n },\n {\n \"name\": \"target\",\n \"docs\": [\n \"The target wallet being removed from blacklist.\"\n ]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"seize\",\n \"docs\": [\n \"Seizes all tokens from a frozen, blacklisted account (SSS-2 and Token ACL modes).\",\n \"\",\n \"Feature-gated: requires compliance (the hook or Token ACL) and enable_permanent_delegate.\",\n \"Uses permanent delegate authority to transfer without owner consent.\"\n ],\n \"discriminator\": [\n 129,\n 159,\n 143,\n 31,\n 161,\n 224,\n 241,\n 84\n ],\n \"accounts\": [\n {\n \"name\": \"seizer\",\n \"docs\": [\n \"The seizer operator — must have Seizer role.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA (also acts as permanent delegate).\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"seizer_role\",\n \"docs\": [\n \"The seizer's role record PDA.\"\n ]\n },\n {\n \"name\": \"blacklist_entry\",\n \"docs\": [\n \"The blacklist entry for the source — must be active.\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 98,\n 108,\n 97,\n 99,\n 107,\n 108,\n 105,\n 115,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"source_authority\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The Token-2022 mint account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"source_token_account\",\n \"docs\": [\n \"The source token account to seize from — must be frozen.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"source_authority\",\n \"docs\": [\n \"The owner of the source token account.\"\n ]\n },\n {\n \"name\": \"treasury_token_account\",\n \"docs\": [\n \"The treasury/destination token account to receive seized tokens.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program.\"\n ]\n },\n {\n \"name\": \"token_acl_program\",\n \"docs\": [\n \"Token ACL program (thaws and refreezes once Token ACL holds the mint's freeze authority).\"\n ],\n \"address\": \"TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP\"\n },\n {\n \"name\": \"mint_config\",\n \"docs\": [\n \"The mint's Token ACL MintConfig PDA; may not exist (Hook-mode mints).\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 77,\n 73,\n 78,\n 84,\n 95,\n 67,\n 79,\n 78,\n 70,\n 73,\n 71\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"account\",\n \"path\": \"token_acl_program\"\n }\n }\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"set_reserve_attestor\",\n \"docs\": [\n \"Sets the key that attests the mint's reserves and the staleness window (seconds).\",\n \"\",\n \"MasterAuthority only. Creates the ReserveAttestation on first use. A new attestor clears the posted\",\n \"reserves, so minting waits for its first `attest_reserves`.\"\n ],\n \"discriminator\": [\n 63,\n 122,\n 156,\n 201,\n 184,\n 150,\n 75,\n 214\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The MasterAuthority; pays for the attestation account the first time.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"authority_role\",\n \"docs\": [\n \"The authority's MasterAuthority role record.\"\n ]\n },\n {\n \"name\": \"mint\",\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"reserve_attestation\",\n \"docs\": [\n \"The mint's reserve attestation, created on first use.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 115,\n 101,\n 114,\n 118,\n 101,\n 95,\n 97,\n 116,\n 116,\n 101,\n 115,\n 116,\n 97,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program for account creation.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"attestor\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_staleness\",\n \"type\": \"i64\"\n }\n ]\n },\n {\n \"name\": \"thaw_account\",\n \"docs\": [\n \"Thaws a frozen token account.\",\n \"\",\n \"Requires MasterAuthority or Blacklister role.\"\n ],\n \"discriminator\": [\n 115,\n 152,\n 79,\n 213,\n 213,\n 169,\n 184,\n 35\n ],\n \"accounts\": [\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The operator — must have MasterAuthority or Blacklister role.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA (also the freeze authority).\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"operator_role\",\n \"docs\": [\n \"The operator's role record PDA.\",\n \"Must be either MasterAuthority or Blacklister with active status.\"\n ]\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The Token-2022 mint account.\"\n ]\n },\n {\n \"name\": \"target_token_account\",\n \"docs\": [\n \"The target token account to freeze or thaw.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program.\"\n ]\n },\n {\n \"name\": \"token_acl_program\",\n \"docs\": [\n \"Token ACL program (used once Token ACL holds the mint's freeze authority).\"\n ],\n \"address\": \"TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP\"\n },\n {\n \"name\": \"mint_config\",\n \"docs\": [\n \"The mint's Token ACL MintConfig PDA; may not exist (Hook-mode mints).\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 77,\n 73,\n 78,\n 84,\n 95,\n 67,\n 79,\n 78,\n 70,\n 73,\n 71\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"account\",\n \"path\": \"token_acl_program\"\n }\n }\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"transfer_authority\",\n \"docs\": [\n \"Transfers MasterAuthority to a new key.\",\n \"\",\n \"Only the current MasterAuthority can call. Old authority is deactivated. A key that held MasterAuthority\",\n \"before gets its record back (reactivated).\"\n ],\n \"discriminator\": [\n 48,\n 169,\n 76,\n 72,\n 229,\n 180,\n 55,\n 161\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The current MasterAuthority.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"old_master_role\",\n \"docs\": [\n \"The current authority's MasterAuthority role record — will be deactivated.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"new_master_role\",\n \"docs\": [\n \"The new authority's MasterAuthority role record: created, or reactivated when the key held MasterAuthority\",\n \"before (S15). An active record means the new authority is the signer itself.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program for account creation.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"new_authority\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"unpause\",\n \"docs\": [\n \"Resumes all token operations.\",\n \"\",\n \"Requires Pauser or MasterAuthority role.\"\n ],\n \"discriminator\": [\n 169,\n 144,\n 4,\n 38,\n 10,\n 141,\n 188,\n 255\n ],\n \"accounts\": [\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The operator — must have Pauser or MasterAuthority role.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"pause_state\",\n \"docs\": [\n \"The pause state PDA to be updated.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 97,\n 117,\n 115,\n 101,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"operator_role\",\n \"docs\": [\n \"The operator's role record PDA.\",\n \"Must be either Pauser or MasterAuthority with active status.\"\n ]\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The config's mint: Token ACL mode pauses it through Token-2022 Pausable.\"\n ],\n \"writable\": true,\n \"relations\": [\n \"config\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token-2022 program (Pausable CPI).\"\n ],\n \"address\": \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"update_minter\",\n \"docs\": [\n \"Creates or updates a minter with a quota.\",\n \"\",\n \"Only MasterAuthority can call. Creates both role record and quota PDAs.\"\n ],\n \"discriminator\": [\n 164,\n 129,\n 164,\n 88,\n 75,\n 29,\n 91,\n 38\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority — must be the current MasterAuthority.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"authority_role\",\n \"docs\": [\n \"The authority's MasterAuthority role record.\"\n ]\n },\n {\n \"name\": \"minter_role\",\n \"docs\": [\n \"The minter's role record PDA — initialized if needed.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"minter_quota\",\n \"docs\": [\n \"The minter's quota PDA — initialized if needed.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 105,\n 110,\n 116,\n 101,\n 114,\n 95,\n 113,\n 117,\n 111,\n 116,\n 97\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"minter\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program for account creation.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"minter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"period\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuotaPeriod\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_roles\",\n \"docs\": [\n \"Creates or updates a role for a given key.\",\n \"\",\n \"Only MasterAuthority can call. Cannot grant MasterAuthority (use transfer_authority).\"\n ],\n \"discriminator\": [\n 220,\n 152,\n 205,\n 233,\n 177,\n 123,\n 219,\n 125\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority — must be the current MasterAuthority.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"config\",\n \"docs\": [\n \"The stablecoin configuration PDA.\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 116,\n 97,\n 98,\n 108,\n 101,\n 99,\n 111,\n 105,\n 110,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"config.mint\",\n \"account\": \"StablecoinConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"authority_role\",\n \"docs\": [\n \"The authority's MasterAuthority role record.\"\n ]\n },\n {\n \"name\": \"target_role\",\n \"docs\": [\n \"The target holder's role record PDA — initialized if needed.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program for account creation.\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"holder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"role\",\n \"type\": {\n \"defined\": {\n \"name\": \"RoleType\"\n }\n }\n },\n {\n \"name\": \"active\",\n \"type\": \"bool\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"AllowlistEntry\",\n \"discriminator\": [\n 42,\n 59,\n 88,\n 1,\n 124,\n 138,\n 92,\n 236\n ]\n },\n {\n \"name\": \"BlacklistEntry\",\n \"discriminator\": [\n 218,\n 179,\n 231,\n 40,\n 141,\n 25,\n 168,\n 189\n ]\n },\n {\n \"name\": \"MinterQuota\",\n \"discriminator\": [\n 42,\n 21,\n 27,\n 217,\n 49,\n 82,\n 230,\n 89\n ]\n },\n {\n \"name\": \"PauseState\",\n \"discriminator\": [\n 21,\n 123,\n 173,\n 77,\n 60,\n 203,\n 197,\n 145\n ]\n },\n {\n \"name\": \"ReserveAttestation\",\n \"discriminator\": [\n 105,\n 212,\n 95,\n 216,\n 140,\n 42,\n 205,\n 75\n ]\n },\n {\n \"name\": \"RoleRecord\",\n \"discriminator\": [\n 178,\n 241,\n 126,\n 194,\n 47,\n 84,\n 237,\n 40\n ]\n },\n {\n \"name\": \"StablecoinConfig\",\n \"discriminator\": [\n 127,\n 25,\n 244,\n 213,\n 1,\n 192,\n 101,\n 6\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"AccountFrozen\",\n \"discriminator\": [\n 221,\n 214,\n 59,\n 29,\n 246,\n 50,\n 119,\n 206\n ]\n },\n {\n \"name\": \"AccountThawed\",\n \"discriminator\": [\n 49,\n 63,\n 73,\n 105,\n 129,\n 190,\n 40,\n 119\n ]\n },\n {\n \"name\": \"AddedToBlacklist\",\n \"discriminator\": [\n 3,\n 196,\n 78,\n 136,\n 111,\n 197,\n 188,\n 114\n ]\n },\n {\n \"name\": \"AllowlistAdded\",\n \"discriminator\": [\n 102,\n 147,\n 146,\n 236,\n 103,\n 153,\n 16,\n 151\n ]\n },\n {\n \"name\": \"AllowlistRemoved\",\n \"discriminator\": [\n 47,\n 69,\n 78,\n 173,\n 196,\n 109,\n 163,\n 172\n ]\n },\n {\n \"name\": \"AuthorityTransferred\",\n \"discriminator\": [\n 245,\n 109,\n 179,\n 54,\n 135,\n 92,\n 22,\n 64\n ]\n },\n {\n \"name\": \"ConfidentialAccountConfigured\",\n \"discriminator\": [\n 123,\n 117,\n 217,\n 151,\n 45,\n 14,\n 147,\n 26\n ]\n },\n {\n \"name\": \"PendingBalanceApplied\",\n \"discriminator\": [\n 129,\n 212,\n 242,\n 132,\n 72,\n 109,\n 183,\n 239\n ]\n },\n {\n \"name\": \"RemovedFromBlacklist\",\n \"discriminator\": [\n 55,\n 136,\n 25,\n 65,\n 199,\n 36,\n 146,\n 33\n ]\n },\n {\n \"name\": \"ReserveAttestorSet\",\n \"discriminator\": [\n 100,\n 112,\n 135,\n 14,\n 59,\n 118,\n 196,\n 107\n ]\n },\n {\n \"name\": \"ReservesAttested\",\n \"discriminator\": [\n 77,\n 249,\n 23,\n 254,\n 52,\n 235,\n 131,\n 145\n ]\n },\n {\n \"name\": \"StablecoinInitialized\",\n \"discriminator\": [\n 238,\n 217,\n 135,\n 14,\n 147,\n 33,\n 221,\n 169\n ]\n },\n {\n \"name\": \"TokenAclEnabled\",\n \"discriminator\": [\n 119,\n 214,\n 150,\n 203,\n 155,\n 200,\n 248,\n 199\n ]\n },\n {\n \"name\": \"TokensBurned\",\n \"discriminator\": [\n 230,\n 255,\n 34,\n 113,\n 226,\n 53,\n 227,\n 9\n ]\n },\n {\n \"name\": \"TokensMinted\",\n \"discriminator\": [\n 207,\n 212,\n 128,\n 194,\n 175,\n 54,\n 64,\n 24\n ]\n },\n {\n \"name\": \"TokensPausedEvent\",\n \"discriminator\": [\n 82,\n 231,\n 96,\n 206,\n 65,\n 209,\n 120,\n 40\n ]\n },\n {\n \"name\": \"TokensSeized\",\n \"discriminator\": [\n 51,\n 129,\n 131,\n 114,\n 206,\n 234,\n 140,\n 122\n ]\n },\n {\n \"name\": \"TokensUnpausedEvent\",\n \"discriminator\": [\n 130,\n 126,\n 142,\n 2,\n 141,\n 161,\n 243,\n 215\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"NotAuthorized\",\n \"msg\": \"Not authorized: the signer lacks the required role for this operation\"\n },\n {\n \"code\": 6001,\n \"name\": \"ConfigImmutable\",\n \"msg\": \"Configuration is immutable: permanent_delegate, transfer_hook, and default_account_frozen cannot be changed after initialization\"\n },\n {\n \"code\": 6002,\n \"name\": \"FeatureNotEnabled\",\n \"msg\": \"Feature not enabled: this operation requires enable_transfer_hook to be true at initialization\"\n },\n {\n \"code\": 6003,\n \"name\": \"AlreadyInitialized\",\n \"msg\": \"Already initialized: a stablecoin config already exists for this mint\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidMint\",\n \"msg\": \"Invalid mint: the provided mint account does not match the config's mint\"\n },\n {\n \"code\": 6005,\n \"name\": \"TokensPaused\",\n \"msg\": \"Tokens paused: mint, burn, and transfer operations are currently suspended\"\n },\n {\n \"code\": 6006,\n \"name\": \"MinterNotFound\",\n \"msg\": \"Minter not found: no active minter role record exists for this address\"\n },\n {\n \"code\": 6007,\n \"name\": \"MinterQuotaExceeded\",\n \"msg\": \"Minter quota exceeded: the requested mint amount would exceed the minter's allowed limit\"\n },\n {\n \"code\": 6008,\n \"name\": \"BurnerNotFound\",\n \"msg\": \"Burner not found: no active burner role record exists for this address\"\n },\n {\n \"code\": 6009,\n \"name\": \"AccountNotFrozen\",\n \"msg\": \"Account not frozen: the target token account is not currently frozen\"\n },\n {\n \"code\": 6010,\n \"name\": \"AccountAlreadyFrozen\",\n \"msg\": \"Account already frozen: the target token account is already in a frozen state\"\n },\n {\n \"code\": 6011,\n \"name\": \"AccountAlreadyBlacklisted\",\n \"msg\": \"Account already blacklisted: an active blacklist entry already exists for this address\"\n },\n {\n \"code\": 6012,\n \"name\": \"AccountNotBlacklisted\",\n \"msg\": \"Account not blacklisted: no active blacklist entry exists for this address\"\n },\n {\n \"code\": 6013,\n \"name\": \"BlacklisterNotFound\",\n \"msg\": \"Blacklister not found: no active blacklister role record exists for this address\"\n },\n {\n \"code\": 6014,\n \"name\": \"SeizeNotAuthorized\",\n \"msg\": \"Seize not authorized: the signer lacks the seizer role or permanent_delegate is not enabled\"\n },\n {\n \"code\": 6015,\n \"name\": \"PauserNotFound\",\n \"msg\": \"Pauser not found: no active pauser role record exists for this address\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidRoleType\",\n \"msg\": \"Invalid role type: the provided role type is not recognized by the program\"\n },\n {\n \"code\": 6017,\n \"name\": \"RoleAlreadyActive\",\n \"msg\": \"Role already active: an active role record already exists for this holder and role type\"\n },\n {\n \"code\": 6018,\n \"name\": \"RoleNotActive\",\n \"msg\": \"Role not active: the role record for this holder is not currently active\"\n },\n {\n \"code\": 6019,\n \"name\": \"InvalidAmount\",\n \"msg\": \"Invalid amount: the provided amount must be greater than zero\"\n },\n {\n \"code\": 6020,\n \"name\": \"Overflow\",\n \"msg\": \"Overflow: arithmetic overflow occurred during supply or quota calculation\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidConfig\",\n \"msg\": \"Invalid config: one or more configuration parameters are out of valid range\"\n },\n {\n \"code\": 6022,\n \"name\": \"TransferHookCheckFailed\",\n \"msg\": \"Transfer hook check failed: the transfer was rejected by the compliance hook\"\n },\n {\n \"code\": 6023,\n \"name\": \"NameTooLong\",\n \"msg\": \"Name too long: the token name exceeds the maximum length of 32 bytes\"\n },\n {\n \"code\": 6024,\n \"name\": \"SymbolTooLong\",\n \"msg\": \"Symbol too long: the token symbol exceeds the maximum length of 10 bytes\"\n },\n {\n \"code\": 6025,\n \"name\": \"UriTooLong\",\n \"msg\": \"URI too long: the metadata URI exceeds the maximum length of 200 bytes\"\n },\n {\n \"code\": 6026,\n \"name\": \"ReasonTooLong\",\n \"msg\": \"Reason too long: the blacklist reason exceeds the maximum length of 100 bytes\"\n },\n {\n \"code\": 6027,\n \"name\": \"PermanentDelegateNotEnabled\",\n \"msg\": \"Permanent delegate not enabled: seize requires enable_permanent_delegate to be true\"\n },\n {\n \"code\": 6028,\n \"name\": \"BlacklistEntryRequired\",\n \"msg\": \"Blacklist entry required: seize requires the target address to have an active blacklist entry\"\n },\n {\n \"code\": 6029,\n \"name\": \"AlreadyPaused\",\n \"msg\": \"Already paused: token operations are already suspended\"\n },\n {\n \"code\": 6030,\n \"name\": \"NotPaused\",\n \"msg\": \"Not paused: token operations are not currently suspended\"\n },\n {\n \"code\": 6031,\n \"name\": \"AllowlistEntryNotActive\",\n \"msg\": \"Allowlist entry not active: the allowlist entry for this wallet has been deactivated\"\n },\n {\n \"code\": 6032,\n \"name\": \"InvalidComplianceMode\",\n \"msg\": \"Invalid compliance mode: use 0 (Hook), 1 (Acl: default_account_frozen, no hook) or 2 (Both: default_account_frozen and the hook)\"\n },\n {\n \"code\": 6033,\n \"name\": \"NotTokenAclMode\",\n \"msg\": \"Not a Token ACL mint: this instruction needs compliance_mode Acl or Both\"\n },\n {\n \"code\": 6034,\n \"name\": \"UnknownFreezeAuthority\",\n \"msg\": \"Unknown freeze authority: the mint's freeze authority is neither the config PDA nor the Token ACL MintConfig\"\n },\n {\n \"code\": 6035,\n \"name\": \"ReserveInsufficient\",\n \"msg\": \"Reserve insufficient: mint supply plus this amount would exceed the attested reserves\"\n },\n {\n \"code\": 6036,\n \"name\": \"ReserveStale\",\n \"msg\": \"Reserve stale: the reserve attestation is older than max_staleness\"\n },\n {\n \"code\": 6037,\n \"name\": \"ReserveAttestationMissing\",\n \"msg\": \"Reserve attestation missing: Acl and Both mode mints need a ReserveAttestation (set_reserve_attestor, then attest_reserves)\"\n },\n {\n \"code\": 6038,\n \"name\": \"NotReserveAttestor\",\n \"msg\": \"Not the reserve attestor: attest_reserves must be signed by the attestor set with set_reserve_attestor\"\n },\n {\n \"code\": 6039,\n \"name\": \"InvalidReserveAttestation\",\n \"msg\": \"Invalid reserve attestation: as_of must be <= now and >= the stored as_of, max_staleness > 0, report_uri <= 200 bytes\"\n },\n {\n \"code\": 6040,\n \"name\": \"TargetAccountOwnerMismatch\",\n \"msg\": \"Target account owner mismatch: target_token_account must be owned by the blacklisted wallet\"\n },\n {\n \"code\": 6041,\n \"name\": \"AllowlistEntryAlreadyActive\",\n \"msg\": \"Allowlist entry already active: this wallet is already on the allowlist\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AccountFrozen\",\n \"docs\": [\n \"Event emitted when a token account is frozen.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"target\",\n \"docs\": [\n \"The frozen token account address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The operator who froze the account.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"AccountThawed\",\n \"docs\": [\n \"Event emitted when a token account is thawed.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"target\",\n \"docs\": [\n \"The thawed token account address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The operator who thawed the account.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"AddedToBlacklist\",\n \"docs\": [\n \"Event emitted when an address is added to the blacklist.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"target\",\n \"docs\": [\n \"The blacklisted wallet address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reason\",\n \"docs\": [\n \"The reason for blacklisting.\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The operator who performed the blacklisting.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"AllowlistAdded\",\n \"docs\": [\n \"Event emitted when a wallet is added to the allowlist.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"wallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"AllowlistEntry\",\n \"docs\": [\n \"An entry on the allowlist for an SSS-3 stablecoin.\",\n \"\",\n \"Derived as a PDA from `[SEED_ALLOWLIST, mint.key(), wallet.key()]`.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The Token-2022 mint this allowlist entry belongs to.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"wallet\",\n \"docs\": [\n \"The wallet address that is allowlisted.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"added_at\",\n \"docs\": [\n \"Unix timestamp when the wallet was added to the allowlist.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"active\",\n \"docs\": [\n \"Whether this entry is currently active.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump seed for this account.\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"AllowlistRemoved\",\n \"docs\": [\n \"Event emitted when a wallet is removed from the allowlist.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"wallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"AuthorityTransferred\",\n \"docs\": [\n \"Event emitted when authority is transferred.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"old_authority\",\n \"docs\": [\n \"The previous authority.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_authority\",\n \"docs\": [\n \"The new authority.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"BlacklistEntry\",\n \"docs\": [\n \"A record of an address that has been blacklisted for a specific mint (SSS-2 only).\",\n \"\",\n \"Derived as a PDA from `[SEED_BLACKLIST, mint.key(), target.key()]`.\",\n \"When an address is blacklisted, their token account is also frozen.\",\n \"Entries are never deleted; `active` is set to `false` when removed, and back to `true` when the address is\",\n \"blacklisted again (`reason`, `added_at` and `added_by` then describe the latest blacklisting).\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint this blacklist entry applies to.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"target\",\n \"docs\": [\n \"The wallet address that is blacklisted.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reason\",\n \"docs\": [\n \"Human-readable reason for the blacklisting (max 100 bytes).\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"added_at\",\n \"docs\": [\n \"Unix timestamp when the address was blacklisted.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"added_by\",\n \"docs\": [\n \"The operator who added this blacklist entry.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"active\",\n \"docs\": [\n \"Whether this blacklist entry is currently active.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump seed for this account.\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ConfidentialAccountConfigured\",\n \"docs\": [\n \"Event emitted when a confidential account is configured.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"GateAllowlistMode\",\n \"docs\": [\n \"Mirror of the gate's `AllowlistMode` (Borsh: the variant index as one byte).\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Off\"\n },\n {\n \"name\": \"AllowOnly\"\n },\n {\n \"name\": \"BypassForPdas\"\n }\n ]\n }\n },\n {\n \"name\": \"GatePolicyConfig\",\n \"docs\": [\n \"The policy the issuer picks. The admin (`config.authority`) and the registry program (sss-token) are set by\",\n \"sss-token.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"check_blacklist\",\n \"docs\": [\n \"Deny holders with an active sss-token `BlacklistEntry`.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"allowlist_mode\",\n \"docs\": [\n \"How the sss-token allowlist (`add_to_allowlist_v3`) is used.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"GateAllowlistMode\"\n }\n }\n },\n {\n \"name\": \"require_sas\",\n \"docs\": [\n \"Require a live SAS attestation (nonce = holder wallet) under this credential and schema.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"sas_credential\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"sas_schema\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"min_kyc_level\",\n \"docs\": [\n \"0 = any level; otherwise the attestation data's first byte must be at least this.\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"InitializeArgs\",\n \"docs\": [\n \"Arguments for the initialize instruction.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"name\",\n \"docs\": [\n \"Human-readable name for the stablecoin (max 32 bytes).\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"docs\": [\n \"Ticker symbol for the stablecoin (max 10 bytes).\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"uri\",\n \"docs\": [\n \"Metadata URI for off-chain metadata (max 200 bytes).\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"decimals\",\n \"docs\": [\n \"Number of decimal places for the token.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"enable_permanent_delegate\",\n \"docs\": [\n \"Whether to enable the permanent delegate extension.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"enable_transfer_hook\",\n \"docs\": [\n \"Whether to enable the transfer hook extension.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"default_account_frozen\",\n \"docs\": [\n \"Whether new token accounts should be frozen by default.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"hook_program_id\",\n \"docs\": [\n \"The transfer hook program ID (required if enable_transfer_hook is true).\"\n ],\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"enable_confidential_transfers\",\n \"docs\": [\n \"Whether to enable confidential transfers (SSS-3).\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"enable_allowlist\",\n \"docs\": [\n \"Whether to enable allowlist-based access control (SSS-3).\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"compliance_mode\",\n \"docs\": [\n \"`COMPLIANCE_MODE_HOOK` (0), `_ACL` (1) or `_BOTH` (2). Last field, so clients built before S6 that omit it\",\n \"encode 0 (Hook, the old behavior).\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"MinterQuota\",\n \"docs\": [\n \"Tracks the minting allowance for a specific minter on a specific mint.\",\n \"\",\n \"Derived as a PDA from `[SEED_QUOTA, mint.key(), minter.key()]`.\",\n \"The `used` counter is checked against `limit` before each mint operation.\",\n \"A `limit` of 0 indicates unlimited minting.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint this quota applies to.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"minter\",\n \"docs\": [\n \"The minter's public key.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"limit\",\n \"docs\": [\n \"Maximum number of tokens allowed to be minted in the period. 0 = unlimited.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"used\",\n \"docs\": [\n \"Number of tokens already minted in the current period.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"period\",\n \"docs\": [\n \"The time period over which the quota resets.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"QuotaPeriod\"\n }\n }\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump seed for this account.\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PauseState\",\n \"docs\": [\n \"Tracks the pause state for a specific stablecoin mint.\",\n \"\",\n \"Derived as a PDA from `[SEED_PAUSE, mint.key()]`.\",\n \"When paused, mint, burn, and transfer operations are blocked.\",\n \"Compliance operations (freeze, thaw, seize) still work while paused.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint this pause state applies to.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"paused\",\n \"docs\": [\n \"Whether token operations are currently paused.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"paused_at\",\n \"docs\": [\n \"Unix timestamp when the last pause/unpause occurred.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"paused_by\",\n \"docs\": [\n \"The operator who last paused/unpaused.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump seed for this account.\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PendingBalanceApplied\",\n \"docs\": [\n \"Event emitted when pending balance is applied.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"QuotaPeriod\",\n \"docs\": [\n \"The time period over which a minter's quota resets.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Daily\"\n },\n {\n \"name\": \"Weekly\"\n },\n {\n \"name\": \"Monthly\"\n },\n {\n \"name\": \"Lifetime\"\n }\n ]\n }\n },\n {\n \"name\": \"RemovedFromBlacklist\",\n \"docs\": [\n \"Event emitted when an address is removed from the blacklist.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"target\",\n \"docs\": [\n \"The wallet address removed from blacklist.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The operator who removed the entry.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"ReserveAttestation\",\n \"docs\": [\n \"The attested reserves for one mint.\",\n \"\",\n \"Derived as a PDA from `[SEED_RESERVE, mint.key()]`. MasterAuthority sets `attestor` and `max_staleness`\",\n \"(`set_reserve_attestor`); only the attestor posts `reserves`, `as_of` and `report_uri` (`attest_reserves`).\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint these reserves back.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"attestor\",\n \"docs\": [\n \"The key whose signature `attest_reserves` requires.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserves\",\n \"docs\": [\n \"Reserves in the mint's **base units** (same decimals as the token: 1.00 of a 6-decimal coin is 1_000_000).\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"as_of\",\n \"docs\": [\n \"Unix time (seconds) at which the attestor measured `reserves`. 0 until the first post.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"max_staleness\",\n \"docs\": [\n \"Seconds after `as_of` during which minting may rely on this attestation.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"report_uri\",\n \"docs\": [\n \"Where the attestor's report lives (max 200 bytes).\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"posted_at\",\n \"docs\": [\n \"Cluster time of the last `attest_reserves`. 0 until the first post.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump seed for this account.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"reserved\",\n \"docs\": [\n \"Zero. Room for an oracle-fed source (Switchboard, Chainlink) without a layout change.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 64\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ReserveAttestorSet\",\n \"docs\": [\n \"Event emitted when MasterAuthority sets the attestor or the staleness window.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"attestor\",\n \"docs\": [\n \"The attestor whose signature `attest_reserves` now requires.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_staleness\",\n \"docs\": [\n \"Seconds after `as_of` during which minting may rely on an attestation.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"reset\",\n \"docs\": [\n \"Whether the posted reserves were cleared (new account or new attestor).\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"ReservesAttested\",\n \"docs\": [\n \"Event emitted when the attestor posts reserves.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"attestor\",\n \"docs\": [\n \"The attestor who signed.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserves\",\n \"docs\": [\n \"Reserves in the mint's base units.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"as_of\",\n \"docs\": [\n \"Unix time at which the reserves were measured.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"report_uri\",\n \"docs\": [\n \"Where the report lives.\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Cluster time of the post.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"RoleRecord\",\n \"docs\": [\n \"A record of a role granted to a specific key for a specific mint.\",\n \"\",\n \"Derived as a PDA from `[SEED_ROLE, mint.key(), holder.key(), &[role as u8]]`.\",\n \"Role records are never deleted. When revoked, `active` is set to `false`.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint this role applies to.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"holder\",\n \"docs\": [\n \"The public key that holds this role.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"role\",\n \"docs\": [\n \"The type of role granted.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"RoleType\"\n }\n }\n },\n {\n \"name\": \"active\",\n \"docs\": [\n \"Whether this role is currently active.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"granted_at\",\n \"docs\": [\n \"Unix timestamp when the role was granted.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump seed for this account.\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"RoleType\",\n \"docs\": [\n \"The type of role that can be assigned to a key holder.\",\n \"\",\n \"Each role grants specific permissions within the SSS program:\",\n \"- `MasterAuthority`: Full administrative control, can manage all other roles\",\n \"- `Minter`: Can mint new tokens up to their quota\",\n \"- `Burner`: Can burn tokens from their own account\",\n \"- `Pauser`: Can pause/unpause all token operations\",\n \"- `Blacklister`: Can add/remove addresses from the blacklist (SSS-2)\",\n \"- `Seizer`: Can seize tokens from frozen, blacklisted accounts (SSS-2)\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"MasterAuthority\"\n },\n {\n \"name\": \"Minter\"\n },\n {\n \"name\": \"Burner\"\n },\n {\n \"name\": \"Pauser\"\n },\n {\n \"name\": \"Blacklister\"\n },\n {\n \"name\": \"Seizer\"\n }\n ]\n }\n },\n {\n \"name\": \"StablecoinConfig\",\n \"docs\": [\n \"Primary configuration account for a stablecoin deployed via the SSS program.\",\n \"\",\n \"Derived as a PDA from `[SEED_CONFIG, mint.key()]`.\",\n \"The `enable_permanent_delegate`, `enable_transfer_hook`, and `default_account_frozen`\",\n \"flags are set once at initialization and are **immutable forever**. Any instruction\",\n \"that attempts to modify them after init will fail with `ConfigImmutable`.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The master authority who can manage roles and transfer authority.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The Token-2022 mint address this config governs.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"name\",\n \"docs\": [\n \"Human-readable name for the stablecoin (max 32 bytes).\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"docs\": [\n \"Ticker symbol for the stablecoin (max 10 bytes).\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"uri\",\n \"docs\": [\n \"Metadata URI for off-chain metadata (max 200 bytes).\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"decimals\",\n \"docs\": [\n \"Number of decimal places for the token.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"enable_permanent_delegate\",\n \"docs\": [\n \"Whether the permanent delegate extension is enabled (immutable after init).\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"enable_transfer_hook\",\n \"docs\": [\n \"Whether the transfer hook extension is enabled (immutable after init).\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"default_account_frozen\",\n \"docs\": [\n \"Whether new token accounts are frozen by default (immutable after init).\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"enable_confidential_transfers\",\n \"docs\": [\n \"Whether confidential transfers (SPL Token-2022 extension) are enabled (SSS-3, immutable after init).\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"enable_allowlist\",\n \"docs\": [\n \"Whether allowlist-based access control is enabled (SSS-3, immutable after init).\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"paused\",\n \"docs\": [\n \"Whether token operations (mint, burn, transfer) are currently paused.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"total_minted\",\n \"docs\": [\n \"Cumulative total of tokens minted since initialization.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_burned\",\n \"docs\": [\n \"Cumulative total of tokens burned since initialization.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump seed for this account.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"compliance_mode\",\n \"docs\": [\n \"How compliance is enforced (immutable after init): `COMPLIANCE_MODE_HOOK`, `_ACL` or `_BOTH`.\",\n \"Appended in S6; must stay the last field (see `STABLECOIN_CONFIG_SIZE`).\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"StablecoinInitialized\",\n \"docs\": [\n \"Event emitted when a new stablecoin is initialized.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address of the new stablecoin.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority who initialized the stablecoin.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"name\",\n \"docs\": [\n \"The token name.\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"docs\": [\n \"The token symbol.\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"decimals\",\n \"docs\": [\n \"Number of decimals.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"enable_permanent_delegate\",\n \"docs\": [\n \"Whether permanent delegate is enabled.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"enable_transfer_hook\",\n \"docs\": [\n \"Whether transfer hook is enabled.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"default_account_frozen\",\n \"docs\": [\n \"Whether accounts are frozen by default.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp of initialization.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"compliance_mode\",\n \"docs\": [\n \"`COMPLIANCE_MODE_HOOK`, `_ACL` or `_BOTH` (appended in S6).\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenAclEnabled\",\n \"docs\": [\n \"Event emitted when a mint is put under Token ACL.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"gating_program\",\n \"docs\": [\n \"The gating program (ThawGate).\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"policy_authority\",\n \"docs\": [\n \"The gate policy's admin (the master authority at this time).\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokensBurned\",\n \"docs\": [\n \"Event emitted when tokens are burned.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"docs\": [\n \"The number of tokens burned.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"burner\",\n \"docs\": [\n \"The burner who executed the burn.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp of the burn.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokensMinted\",\n \"docs\": [\n \"Event emitted when tokens are minted.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"recipient\",\n \"docs\": [\n \"The recipient wallet address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"docs\": [\n \"The number of tokens minted.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"minter\",\n \"docs\": [\n \"The minter who executed the mint.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp of the mint.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokensPausedEvent\",\n \"docs\": [\n \"Event emitted when token operations are paused.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The operator who paused operations.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp when paused.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokensSeized\",\n \"docs\": [\n \"Event emitted when tokens are seized.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"source\",\n \"docs\": [\n \"The source account that was seized from.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"treasury\",\n \"docs\": [\n \"The treasury account that received the tokens.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"docs\": [\n \"The number of tokens seized.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"seizer\",\n \"docs\": [\n \"The seizer who executed the operation.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokensUnpausedEvent\",\n \"docs\": [\n \"Event emitted when token operations are unpaused.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"The mint address.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"The operator who unpaused operations.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp when unpaused.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}","/**\n * @module errors\n * @description Error class hierarchy for the SSS SDK.\n *\n * Maps on-chain Anchor error codes to typed JavaScript errors. The code → name → message tables come from the\n * programs' IDLs (`src/idl.json`, `src/gate/idl.json`), which CI compares byte for byte with its own `anchor build`.\n */\n\nimport SSS_TOKEN_IDL from \"./idl.json\";\nimport GATE_IDL from \"./gate/idl.json\";\n\n/**\n * Base error class for all SSS SDK errors.\n */\nexport class SSSError extends Error {\n /** The Anchor error code (if from on-chain). */\n public readonly code?: number;\n /** The original error that caused this one. */\n public readonly cause?: Error;\n /** The program's name for the error, from its IDL (e.g. `\"ReserveInsufficient\"`), when a program raised it. */\n public readonly errorName?: string;\n /** The program that raised it (base58), when known. */\n public readonly program?: string;\n\n constructor(message: string, code?: number, cause?: Error) {\n super(message);\n this.name = \"SSSError\";\n this.code = code;\n this.cause = cause;\n // Ensure proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Alias for `code` — spec requires the field to be named `errorCode`.\n * LOW-002: added getter for spec API surface compatibility.\n */\n get errorCode(): number | undefined {\n return this.code;\n }\n}\n\n/**\n * Error thrown when a transaction fails on-chain.\n */\nexport class TransactionError extends SSSError {\n /** The transaction signature (if available). */\n public readonly signature?: string;\n /** The transaction logs (if available). */\n public readonly logs?: string[];\n\n constructor(\n message: string,\n code?: number,\n signature?: string,\n logs?: string[],\n ) {\n super(message, code);\n this.name = \"TransactionError\";\n this.signature = signature;\n this.logs = logs;\n }\n}\n\n/**\n * Error thrown when authorization/permission checks fail.\n */\nexport class AuthorizationError extends SSSError {\n constructor(message: string, code?: number) {\n super(message, code);\n this.name = \"AuthorizationError\";\n }\n}\n\n/**\n * Error thrown when the token is paused and the operation is blocked.\n */\nexport class TokenPausedError extends SSSError {\n constructor(message = \"Token operations are currently paused\") {\n super(message);\n this.name = \"TokenPausedError\";\n }\n}\n\n/**\n * Error thrown when a feature is not enabled (e.g., SSS-2 operations on SSS-1).\n */\nexport class FeatureNotEnabledError extends SSSError {\n constructor(feature: string) {\n super(`Feature \"${feature}\" is not enabled for this stablecoin`);\n this.name = \"FeatureNotEnabledError\";\n }\n}\n\n/**\n * Error thrown when an account is blacklisted.\n */\nexport class BlacklistedError extends SSSError {\n constructor(address: string) {\n super(`Account ${address} is blacklisted`);\n this.name = \"BlacklistedError\";\n }\n}\n\n/**\n * Error thrown when a minter exceeds their quota.\n */\nexport class QuotaExceededError extends SSSError {\n /** The current quota limit. */\n public readonly limit: bigint;\n /** The amount already used. */\n public readonly used: bigint;\n /** The amount that was attempted. */\n public readonly attempted: bigint;\n\n /** `message` replaces the default text, e.g. when the amounts aren't known (a program error). */\n constructor(limit: bigint, used: bigint, attempted: bigint, message?: string) {\n super(\n message ?? `Minter quota exceeded: limit=${limit}, used=${used}, attempted=${attempted}`,\n );\n this.name = \"QuotaExceededError\";\n this.limit = limit;\n this.used = used;\n this.attempted = attempted;\n }\n}\n\n/**\n * Error thrown for invalid configuration or arguments.\n */\nexport class ConfigError extends SSSError {\n constructor(message: string) {\n super(message);\n this.name = \"ConfigError\";\n }\n}\n\n/**\n * Error thrown when an account is not found on-chain.\n */\nexport class AccountNotFoundError extends SSSError {\n constructor(accountType: string, address: string) {\n super(`${accountType} account not found: ${address}`);\n this.name = \"AccountNotFoundError\";\n }\n}\n\n// ============================================================================\n// Error Code Mapping\n// ============================================================================\n\n/** One error a program declares in its IDL. */\nexport interface ProgramErrorInfo {\n /** The declaring program (base58, the IDL's `address`). */\n program: string;\n code: number;\n name: string;\n msg: string;\n}\n\ntype IdlErrors = { address: string; errors?: readonly { code: number; name: string; msg?: string }[] };\n\nfunction errorTable(idl: IdlErrors): Readonly<Record<number, ProgramErrorInfo>> {\n const rows = (idl.errors ?? []).map((e) => [e.code, Object.freeze({ program: idl.address, code: e.code, name: e.name, msg: e.msg ?? e.name })]);\n return Object.freeze(Object.fromEntries(rows));\n}\n\n/** sss-token's errors by code, from its IDL. */\nexport const SSS_TOKEN_ERRORS = errorTable(SSS_TOKEN_IDL);\n/** The ThawGate gate's errors by code, from its IDL. */\nexport const THAWGATE_GATE_ERRORS = errorTable(GATE_IDL);\n\nconst TABLES: Readonly<Record<string, Readonly<Record<number, ProgramErrorInfo>>>> = {\n [SSS_TOKEN_IDL.address]: SSS_TOKEN_ERRORS,\n [GATE_IDL.address]: THAWGATE_GATE_ERRORS,\n};\n\n/** The IDL entry for `code` raised by `program` (base58); undefined for a program or code the SDK doesn't know. */\nexport function programError(program: string, code: number): ProgramErrorInfo | undefined {\n return TABLES[program]?.[code];\n}\n\n/** Errors that mean \"the signer lacks the role or key for this\", by IDL name. */\nconst AUTHORIZATION_ERRORS = new Set([\n \"NotAuthorized\",\n \"MinterNotFound\",\n \"BurnerNotFound\",\n \"BlacklisterNotFound\",\n \"PauserNotFound\",\n \"SeizeNotAuthorized\",\n \"NotReserveAttestor\",\n \"NotFreezeAuthority\",\n \"NotPolicyAuthority\",\n]);\n\n/** The SDK class for a program error, chosen by its IDL name (never by number, which moves when errors are added). */\nfunction fromProgramError(info: ProgramErrorInfo, cause?: Error): SSSError {\n let err: SSSError;\n if (info.program === SSS_TOKEN_IDL.address && info.name === \"TokensPaused\") err = new TokenPausedError(info.msg);\n else if (info.program === SSS_TOKEN_IDL.address && info.name === \"MinterQuotaExceeded\") err = new QuotaExceededError(0n, 0n, 0n, info.msg);\n else if (info.program === SSS_TOKEN_IDL.address && info.name === \"FeatureNotEnabled\") {\n // The IDL text names only the transfer hook; the program also raises it for Token ACL compliance, the allowlist\n // and confidential transfers.\n err = new FeatureNotEnabledError(\"compliance (transfer hook or Token ACL), allowlist or confidential transfers\");\n } else if (AUTHORIZATION_ERRORS.has(info.name)) err = new AuthorizationError(info.msg);\n else err = new SSSError(info.msg, undefined, cause);\n return Object.assign(err, { code: info.code, errorName: info.name, program: info.program });\n}\n\n/** The first `Program <id> failed: custom program error: 0x…` line: the program that raised the error (outer\n * programs repeat the same code as it propagates up through the CPIs). */\nfunction failedProgram(logs: unknown): { program: string; code: number } | undefined {\n if (!Array.isArray(logs)) return undefined;\n for (const line of logs) {\n const m = typeof line === \"string\" ? /^Program (\\w+) failed: custom program error: 0x([0-9a-fA-F]+)$/.exec(line) : null;\n if (m) return { program: m[1], code: parseInt(m[2], 16) };\n }\n return undefined;\n}\n\nconst base58Of = (p: unknown): string | undefined =>\n typeof p === \"string\" ? p : typeof (p as { toBase58?: unknown })?.toBase58 === \"function\" ? (p as { toBase58(): string }).toBase58() : undefined;\n\n/**\n * Parses an error from a program call into a typed SSSError.\n *\n * Reads, in order: an Anchor `AnchorError` (`error.errorCode.number` and `program`); a numeric `code` (Anchor's\n * `ProgramError`, raised by the SDK's sss-token calls); the transaction logs (`logs`, as on web3.js's\n * `SendTransactionError` from `client.send`). Codes are looked up in the raising program's IDL; a program the SDK\n * doesn't know (Token-2022, Token ACL, …) is left unmapped. A code without a program is read as sss-token's.\n *\n * @param error - The raw error from Anchor/web3.js\n * @returns A typed SSSError instance\n */\nexport function parseError(error: unknown): SSSError {\n if (error instanceof SSSError) return error;\n\n const err = (error ?? {}) as Record<string, any>;\n const cause = error instanceof Error ? error : undefined;\n const failed = failedProgram(err.logs ?? err.transactionLogs);\n const anchorCode = err.error?.errorCode?.number;\n const code: number | undefined =\n typeof anchorCode === \"number\"\n ? anchorCode\n : typeof err.code === \"number\"\n ? err.code\n : typeof err.error?.code === \"number\"\n ? err.error.code\n : failed?.code;\n const program = base58Of(err.program) ?? failed?.program ?? SSS_TOKEN_IDL.address;\n\n const info = code !== undefined ? programError(program, code) : undefined;\n if (info) return fromProgramError(info, cause);\n\n // Fallback: wrap in generic SSSError\n const message =\n err?.message && typeof err.message === \"string\"\n ? err.message\n : \"Unknown SSS error\";\n\n return new SSSError(message, code, cause);\n}\n\n// ============================================================================\n// Spec-required named error aliases (HIGH-005)\n// These aliases use the exact names required by the SSS specification,\n// which differ from the internal implementation names above.\n// We keep the originals to avoid breaking internal usage.\n// ============================================================================\n\n/**\n * @spec SssError — base error class alias required by the SSS spec.\n */\nexport class SssError extends SSSError {\n constructor(message: string, code?: number, cause?: Error) {\n super(message, code, cause);\n this.name = \"SssError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * @spec SssInitError — initialization error class required by the SSS spec.\n * Maps to TransactionError for initialization transactions.\n */\nexport class SssInitError extends SSSError {\n constructor(message: string, cause?: Error) {\n super(message, undefined, cause);\n this.name = \"SssInitError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * @spec SssMintError — minting error class required by the SSS spec.\n * Maps to QuotaExceededError and related mint errors.\n */\nexport class SssMintError extends SSSError {\n constructor(message: string, cause?: Error) {\n super(message, undefined, cause);\n this.name = \"SssMintError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * @spec SssComplianceError — compliance error class required by the SSS spec.\n * Maps to BlacklistedError and related compliance errors.\n */\nexport class SssComplianceError extends SSSError {\n constructor(message: string, cause?: Error) {\n super(message, undefined, cause);\n this.name = \"SssComplianceError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * @spec SssRpcError — network/RPC error class required by the SSS spec.\n * Maps to TransactionError for network-level failures.\n */\nexport class SssRpcError extends SSSError {\n constructor(message: string, cause?: Error) {\n super(message, undefined, cause);\n this.name = \"SssRpcError\";\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","/**\n * @module base/roles\n * @description Role management operations — update_minter, update_roles, transfer_authority.\n */\n\nimport {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Program } from \"@coral-xyz/anchor\";\nimport BN from \"bn.js\";\nimport {\n findConfigPda,\n findRolePda,\n findQuotaPda,\n} from \"../pda\";\nimport { RoleType, QuotaPeriod } from \"../types\";\nimport { parseError } from \"../errors\";\n\n/**\n * Creates or updates a minter with a quota.\n *\n * @param program - The Anchor program instance\n * @param mint - The Token-2022 mint address\n * @param authority - The MasterAuthority's public key\n * @param minter - The minter's public key\n * @param limit - Maximum mint amount per period\n * @param period - The quota period\n * @returns Transaction instructions\n */\nexport async function updateMinter(\n program: Program,\n mint: PublicKey,\n authority: PublicKey,\n minter: PublicKey,\n limit: BN,\n period: QuotaPeriod,\n): Promise<TransactionInstruction[]> {\n const programId = program.programId;\n const [configPda] = findConfigPda(mint, programId);\n const [authorityRolePda] = findRolePda(\n mint,\n authority,\n RoleType.MasterAuthority,\n programId,\n );\n const [minterRolePda] = findRolePda(mint, minter, RoleType.Minter, programId);\n const [quotaPda] = findQuotaPda(mint, minter, programId);\n\n try {\n const ix = await program.methods\n .updateMinter(minter, limit, { [QuotaPeriod[period].toLowerCase()]: {} })\n .accounts({\n authority,\n config: configPda,\n authorityRole: authorityRolePda,\n minterRole: minterRolePda,\n minterQuota: quotaPda,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n}\n\n/**\n * Creates or updates a role for a given key.\n *\n * Cannot grant MasterAuthority — use transferAuthority instead.\n *\n * @param program - The Anchor program instance\n * @param mint - The Token-2022 mint address\n * @param authority - The MasterAuthority's public key\n * @param holder - The key to grant/revoke the role for\n * @param role - The role type (cannot be MasterAuthority)\n * @param active - Whether to activate or deactivate\n * @returns Transaction instructions\n */\nexport async function updateRoles(\n program: Program,\n mint: PublicKey,\n authority: PublicKey,\n holder: PublicKey,\n role: RoleType,\n active: boolean,\n): Promise<TransactionInstruction[]> {\n const programId = program.programId;\n const [configPda] = findConfigPda(mint, programId);\n const [authorityRolePda] = findRolePda(\n mint,\n authority,\n RoleType.MasterAuthority,\n programId,\n );\n const [targetRolePda] = findRolePda(mint, holder, role, programId);\n\n try {\n const ix = await program.methods\n .updateRoles(holder, { [RoleType[role].toLowerCase()]: {} }, active)\n .accounts({\n authority,\n config: configPda,\n authorityRole: authorityRolePda,\n targetRole: targetRolePda,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n}\n\n/**\n * Transfers MasterAuthority to a new key.\n *\n * The old authority's role record is deactivated (audit trail).\n *\n * @param program - The Anchor program instance\n * @param mint - The Token-2022 mint address\n * @param authority - The current MasterAuthority's public key\n * @param newAuthority - The new MasterAuthority's public key\n * @returns Transaction instructions\n */\nexport async function transferAuthority(\n program: Program,\n mint: PublicKey,\n authority: PublicKey,\n newAuthority: PublicKey,\n): Promise<TransactionInstruction[]> {\n const programId = program.programId;\n const [configPda] = findConfigPda(mint, programId);\n const [oldMasterRolePda] = findRolePda(\n mint,\n authority,\n RoleType.MasterAuthority,\n programId,\n );\n const [newMasterRolePda] = findRolePda(\n mint,\n newAuthority,\n RoleType.MasterAuthority,\n programId,\n );\n\n try {\n const ix = await program.methods\n .transferAuthority(newAuthority)\n .accounts({\n authority,\n config: configPda,\n oldMasterRole: oldMasterRolePda,\n newMasterRole: newMasterRolePda,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n}\n","/**\n * @module modules/compliance\n * @description ComplianceModule class for SSS-2 compliance operations.\n *\n * Provides blacklist management and token seizure capabilities.\n * All methods are feature-gated — they throw FeatureNotEnabledError\n * if the stablecoin was not initialized with SSS-2 features.\n */\n\nimport {\n AccountMeta,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Program } from \"@coral-xyz/anchor\";\nimport BN from \"bn.js\";\nimport {\n TOKEN_2022_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport {\n findConfigPda,\n findRolePda,\n findBlacklistPda,\n findAllowlistPda,\n} from \"../pda\";\nimport { RoleType } from \"../types\";\nimport type { StablecoinConfig, BlacklistEntry } from \"../types\";\nimport { FeatureNotEnabledError, parseError } from \"../errors\";\n\n/**\n * ComplianceModule — SSS-2 compliance operations.\n *\n * Encapsulates blacklist and seizure operations. Validates that the\n * stablecoin has SSS-2 features enabled before executing.\n *\n * @example\n * ```ts\n * const compliance = new ComplianceModule(program, mint, config);\n *\n * // Add to blacklist\n * const ixs = await compliance.addToBlacklist(operator, target, \"OFAC sanctioned\");\n *\n * // Seize tokens\n * const seizeIxs = await compliance.seize(seizer, sourceTokenAccount, treasury);\n * ```\n */\nexport class ComplianceModule {\n private readonly program: Program;\n private readonly mint: PublicKey;\n private readonly programId: PublicKey;\n\n constructor(program: Program, mint: PublicKey) {\n this.program = program;\n this.mint = mint;\n this.programId = program.programId;\n }\n\n /**\n * Adds an address to the blacklist and freezes their token account.\n *\n * @param operator - The Blacklister operator's public key\n * @param target - The wallet to blacklist\n * @param reason - Human-readable reason (max 200 chars)\n * @param opts.targetTokenAccount - The target's token account to pass (default: its ATA). sss-token requires an\n * account owned by `target` (S9); on Token ACL mints it is frozen in the same transaction if thawed.\n * @returns Transaction instructions\n * @throws FeatureNotEnabledError if transfer_hook is not enabled\n */\n async addToBlacklist(\n operator: PublicKey,\n target: PublicKey,\n reason: string,\n opts: { targetTokenAccount?: PublicKey } = {},\n ): Promise<TransactionInstruction[]> {\n const [configPda] = findConfigPda(this.mint, this.programId);\n const [operatorRolePda] = findRolePda(\n this.mint,\n operator,\n RoleType.Blacklister,\n this.programId,\n );\n const [blacklistPda] = findBlacklistPda(this.mint, target, this.programId);\n\n const targetAta = opts.targetTokenAccount ?? getAssociatedTokenAddressSync(\n this.mint,\n target,\n true,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n try {\n const ix = await this.program.methods\n .addToBlacklist(reason)\n .accounts({\n operator,\n config: configPda,\n operatorRole: operatorRolePda,\n blacklistEntry: blacklistPda,\n target,\n mint: this.mint,\n targetTokenAccount: targetAta,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n }\n\n /**\n * Removes an address from the blacklist.\n *\n * Does NOT automatically thaw the account — call thawAccount separately.\n *\n * @param operator - The Blacklister operator's public key\n * @param target - The wallet to remove from blacklist\n * @returns Transaction instructions\n */\n async removeFromBlacklist(\n operator: PublicKey,\n target: PublicKey,\n ): Promise<TransactionInstruction[]> {\n const [configPda] = findConfigPda(this.mint, this.programId);\n const [operatorRolePda] = findRolePda(\n this.mint,\n operator,\n RoleType.Blacklister,\n this.programId,\n );\n const [blacklistPda] = findBlacklistPda(this.mint, target, this.programId);\n\n try {\n const ix = await this.program.methods\n .removeFromBlacklist()\n .accounts({\n operator,\n config: configPda,\n operatorRole: operatorRolePda,\n blacklistEntry: blacklistPda,\n target,\n })\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n }\n\n /**\n * Adds a wallet to the issuer allowlist (`add_to_allowlist_v3`, MasterAuthority). Needs a mint initialized with\n * `enableAllowlist`; a ThawGate `allowOnly` or `bypassForPdas` policy reads the entry.\n */\n async addToAllowlist(authority: PublicKey, wallet: PublicKey): Promise<TransactionInstruction[]> {\n return this.allowlistIx(\"addToAllowlistV3\", authority, wallet);\n }\n\n /** Deactivates a wallet's allowlist entry (`remove_from_allowlist_v3`, MasterAuthority). */\n async removeFromAllowlist(authority: PublicKey, wallet: PublicKey): Promise<TransactionInstruction[]> {\n return this.allowlistIx(\"removeFromAllowlistV3\", authority, wallet);\n }\n\n private async allowlistIx(method: \"addToAllowlistV3\" | \"removeFromAllowlistV3\", authority: PublicKey, wallet: PublicKey): Promise<TransactionInstruction[]> {\n const accounts: Record<string, PublicKey> = {\n authority,\n config: findConfigPda(this.mint, this.programId)[0],\n authorityRole: findRolePda(this.mint, authority, RoleType.MasterAuthority, this.programId)[0],\n wallet,\n allowlistEntry: findAllowlistPda(this.mint, wallet, this.programId)[0],\n };\n if (method === \"addToAllowlistV3\") accounts.systemProgram = SystemProgram.programId;\n try {\n const ix = await (this.program.methods as any)[method]().accountsStrict(accounts).instruction();\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n }\n\n /**\n * Seizes all tokens from a frozen, blacklisted account.\n *\n * Requires both enable_transfer_hook and enable_permanent_delegate.\n *\n * @param seizer - The Seizer operator's public key\n * @param sourceAuthority - The owner of the source token account\n * @param sourceTokenAccount - The frozen token account to seize from\n * @param treasuryTokenAccount - The treasury to receive seized tokens\n * @returns Transaction instructions\n */\n async seize(\n seizer: PublicKey,\n sourceAuthority: PublicKey,\n sourceTokenAccount: PublicKey,\n treasuryTokenAccount: PublicKey,\n remainingAccounts?: AccountMeta[],\n ): Promise<TransactionInstruction[]> {\n const [configPda] = findConfigPda(this.mint, this.programId);\n const [seizerRolePda] = findRolePda(\n this.mint,\n seizer,\n RoleType.Seizer,\n this.programId,\n );\n const [blacklistPda] = findBlacklistPda(\n this.mint,\n sourceAuthority,\n this.programId,\n );\n\n try {\n const ix = await this.program.methods\n .seize()\n .accounts({\n seizer,\n config: configPda,\n seizerRole: seizerRolePda,\n blacklistEntry: blacklistPda,\n mint: this.mint,\n sourceTokenAccount,\n sourceAuthority,\n treasuryTokenAccount,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n })\n .remainingAccounts(remainingAccounts || [])\n .instruction();\n\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n }\n\n /**\n * Fetches a blacklist entry for a given target.\n *\n * @param target - The wallet to check\n * @returns The BlacklistEntry or null if not found\n */\n async getBlacklistEntry(target: PublicKey): Promise<BlacklistEntry | null> {\n const [blacklistPda] = findBlacklistPda(this.mint, target, this.programId);\n\n try {\n const accounts = this.program.account as Record<string, { fetch: (pda: PublicKey) => Promise<unknown> }>;\n const account = await accounts[\"blacklistEntry\"].fetch(blacklistPda);\n return account as BlacklistEntry;\n } catch {\n return null;\n }\n }\n\n /**\n * Checks if a wallet is currently blacklisted.\n *\n * @param target - The wallet to check\n * @returns true if actively blacklisted\n */\n async isBlacklisted(target: PublicKey): Promise<boolean> {\n const entry = await this.getBlacklistEntry(target);\n return entry?.active ?? false;\n }\n}\n","/**\n * @module modules/privacy\n * @description Privacy module placeholder for SSS-3 (confidential transfers).\n *\n * SSS-3 will leverage SPL Confidential Transfer extension\n * for zero-knowledge proof-based privacy-preserving transfers.\n *\n * This module is a placeholder for future implementation.\n */\n\nimport { PublicKey } from \"@solana/web3.js\";\nimport { FeatureNotEnabledError } from \"../errors\";\n\n/**\n * PrivacyModule — SSS-3 confidential transfer operations (placeholder).\n *\n * @remarks\n * This module will be implemented when SPL Confidential Transfer\n * extension support is mature and audited.\n */\nexport class PrivacyModule {\n private readonly mint: PublicKey;\n\n constructor(mint: PublicKey) {\n this.mint = mint;\n }\n\n /**\n * Initializes confidential transfer extension for the mint.\n * @throws FeatureNotEnabledError — SSS-3 is not yet implemented\n */\n async initializeConfidentialTransfer(): Promise<never> {\n throw new FeatureNotEnabledError(\n \"SSS-3 confidential transfers are not yet implemented\",\n );\n }\n\n /**\n * Creates a confidential transfer.\n * @throws FeatureNotEnabledError — SSS-3 is not yet implemented\n */\n async confidentialTransfer(): Promise<never> {\n throw new FeatureNotEnabledError(\n \"SSS-3 confidential transfers are not yet implemented\",\n );\n }\n\n /**\n * Retrieves the confidential balance of a token account.\n * @throws FeatureNotEnabledError — SSS-3 is not yet implemented\n */\n async getConfidentialBalance(): Promise<never> {\n throw new FeatureNotEnabledError(\n \"SSS-3 confidential transfers are not yet implemented\",\n );\n }\n}\n","/**\n * @module modules/reserves\n * @description ReservesModule: the reserve attestation that `mint_tokens` checks (S9).\n *\n * MasterAuthority sets the attestor and the staleness window; the attestor posts reserves. `mint_tokens` then\n * refuses a mint when `mint.supply + amount > reserves` (ReserveInsufficient) or `now - asOf > maxStaleness`\n * (ReserveStale). Reserves are in the mint's base units (1.00 of a 6-decimal coin = 1_000_000).\n * Acl/Both mode mints need an attestation to mint at all; Hook mode mints are checked once one exists.\n */\n\nimport { PublicKey, SystemProgram, TransactionInstruction } from \"@solana/web3.js\";\nimport { Program } from \"@coral-xyz/anchor\";\nimport BN from \"bn.js\";\nimport { findConfigPda, findReserveAttestationPda, findRolePda } from \"../pda\";\nimport { RoleType } from \"../types\";\nimport { parseError } from \"../errors\";\n\n/** On-chain `ReserveAttestation` (PDA `[\"reserve_attestation\", mint]`). */\nexport interface ReserveAttestation {\n mint: PublicKey;\n attestor: PublicKey;\n /** Base units of the mint. */\n reserves: BN;\n /** Unix seconds at which the reserves were measured; 0 until the first post. */\n asOf: BN;\n /** Seconds after `asOf` during which minting may rely on the attestation. */\n maxStaleness: BN;\n reportUri: string;\n /** Cluster time of the last post; 0 until the first post. */\n postedAt: BN;\n bump: number;\n}\n\n/**\n * @example\n * ```ts\n * const reserves = client.reserves(mint);\n * await reserves.setReserveAttestor(master, attestor, 86_400); // MasterAuthority\n * await reserves.attestReserves(attestor, new BN(1_000_000_000), asOf, \"https://example.com/report.json\");\n * ```\n */\nexport class ReservesModule {\n private readonly program: Program;\n private readonly mint: PublicKey;\n private readonly programId: PublicKey;\n\n constructor(program: Program, mint: PublicKey) {\n this.program = program;\n this.mint = mint;\n this.programId = program.programId;\n }\n\n /** The mint's ReserveAttestation address. */\n address(): PublicKey {\n return findReserveAttestationPda(this.mint, this.programId)[0];\n }\n\n /**\n * Sets the attestor and the staleness window (seconds). MasterAuthority only; creates the account on first\n * use. A different attestor clears the posted reserves, so minting waits for its first post.\n */\n async setReserveAttestor(\n authority: PublicKey,\n attestor: PublicKey,\n maxStalenessSeconds: number | BN,\n ): Promise<TransactionInstruction[]> {\n try {\n const ix = await this.program.methods\n .setReserveAttestor(attestor, new BN(maxStalenessSeconds.toString()))\n .accountsStrict({\n authority,\n config: findConfigPda(this.mint, this.programId)[0],\n authorityRole: findRolePda(this.mint, authority, RoleType.MasterAuthority, this.programId)[0],\n mint: this.mint,\n reserveAttestation: this.address(),\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n }\n\n /**\n * Posts reserves (base units) measured at `asOf` (unix seconds). Signed by the attestor. `asOf` may not be in\n * the future or older than the stored one; `reportUri` is at most 200 bytes.\n */\n async attestReserves(\n attestor: PublicKey,\n reserves: BN,\n asOf: number | BN,\n reportUri: string,\n ): Promise<TransactionInstruction[]> {\n try {\n const ix = await this.program.methods\n .attestReserves(reserves, new BN(asOf.toString()), reportUri)\n .accountsStrict({ attestor, reserveAttestation: this.address() })\n .instruction();\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n }\n\n /** The mint's attestation, or null if MasterAuthority never set an attestor. */\n async fetch(): Promise<ReserveAttestation | null> {\n return (await (this.program.account as any).reserveAttestation.fetchNullable(this.address())) as ReserveAttestation | null;\n }\n}\n","/**\n * @module client\n * @description SolanaStablecoin — the main SDK entrypoint class.\n *\n * Provides a high-level, ergonomic API for interacting with SSS stablecoins.\n * Wraps all base operations, role management, and compliance modules.\n *\n * @example\n * ```ts\n * import { SolanaStablecoin, sss1Preset } from \"@thawgate/sdk\";\n *\n * const client = SolanaStablecoin.fromConfig({\n * rpcUrl: \"https://api.devnet.solana.com\",\n * programId: new PublicKey(\"...\"),\n * });\n *\n * // Initialize a new SSS-1 stablecoin\n * const { instructions, mint } = await client.initialize(\n * authority.publicKey,\n * sss1Preset(\"USD Stablecoin\", \"USDS\", \"https://meta.example.com\", 6),\n * );\n * ```\n */\n\nimport {\n PublicKey,\n Commitment,\n ComputeBudgetProgram,\n Connection,\n Keypair,\n Signer,\n SystemProgram,\n SYSVAR_CLOCK_PUBKEY,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Program, AnchorProvider } from \"@coral-xyz/anchor\";\nimport { TOKEN_2022_PROGRAM_ID } from \"@solana/spl-token\";\nimport BN from \"bn.js\";\nimport {\n findConfigPda,\n findPauseStatePda,\n findRolePda,\n findQuotaPda,\n} from \"./pda\";\nimport { GateClient, PolicyInput, toGatePolicyConfig } from \"./gate/client\";\nimport { findFreezeExtraMetasPda, findMintConfigPda, findThawExtraMetasPda } from \"./gate/tokenAcl\";\nimport { sssAclPreset } from \"./presets/sssAcl\";\nimport { keypairWallet } from \"./wallet\";\nimport * as tokenOps from \"./base/token\";\nimport * as roleOps from \"./base/roles\";\nimport { ComplianceModule } from \"./modules/compliance\";\nimport { PrivacyModule } from \"./modules/privacy\";\nimport { ReservesModule } from \"./modules/reserves\";\nimport IDL from \"./idl.json\";\nimport { SSS_TOKEN_PROGRAM_ID, TOKEN_ACL_PROGRAM_ID, TRANSFER_HOOK_PROGRAM_ID } from \"./programs\";\nimport type {\n SSSClientConfig,\n InitializeArgs,\n StablecoinConfig,\n RoleRecord,\n MinterQuota,\n PauseState,\n} from \"./types\";\nimport { RoleType, QuotaPeriod } from \"./types\";\nimport { ConfigError, AccountNotFoundError, parseError } from \"./errors\";\n\n// Placeholder program ID patterns — used for validation only.\n// These must NOT be shipped as defaults; callers must configure real IDs.\nconst PLACEHOLDER_PATTERNS = [\n \"SSSToken11111111111111111111111111111111111\",\n \"Hook111111111111111111111111111111111111111\",\n \"11111111111111111111111111111111\",\n];\n\n/**\n * Validates that a program ID is not a known placeholder.\n * Throws ConfigError if the ID matches a placeholder pattern.\n */\nfunction validateProgramId(id: PublicKey | undefined, name: string): void {\n if (!id) {\n throw new ConfigError(\n `${name} is not configured. Provide it in the SDK config.`,\n );\n }\n const idStr = id.toBase58();\n if (PLACEHOLDER_PATTERNS.includes(idStr)) {\n throw new ConfigError(\n `${name} is set to a placeholder value (${idStr}). ` +\n `Configure the real deployed program ID.`,\n );\n }\n}\n\ntype Amount = BN | bigint | number | string;\nconst toBN = (a: Amount) => (BN.isBN(a) ? (a as BN) : new BN(a.toString()));\n\n/** Options for {@link SolanaStablecoin.createStablecoin}. Amounts are base units (10^decimals per token). */\nexport interface CreateStablecoinOptions {\n name: string;\n symbol: string;\n uri?: string;\n /** Default 6. */\n decimals?: number;\n /** The ThawGate policy. `issuerProgram` and `authority` are set by sss-token (itself, and the issuer's wallet). */\n policy: PolicyInput;\n reserves: {\n /** Reserves to post now, in base units: the supply can't exceed it. */\n amount: Amount;\n /** Link to the reserve report (at most 200 bytes). */\n reportUri: string;\n /** How old a post may be before minting stops. Default 86,400 s (1 day). */\n maxStalenessSeconds?: number;\n /** Who posts reserves. Default: the wallet, which then posts `amount` now; another attestor posts later. */\n attestor?: PublicKey;\n };\n /** The Minter role and quota; default the wallet with quota = reserves, lifetime. `false` grants none. */\n minter?: { address?: PublicKey; quota?: Amount; period?: QuotaPeriod } | false;\n /** Create the mint with the sss-token allowlist on. Default: on when the policy's allowlistMode isn't \"off\". */\n enableAllowlist?: boolean;\n /** The mint's keypair (vanity addresses); generated by default. */\n mintKeypair?: Keypair;\n}\n\nexport interface CreatedStablecoin {\n mint: PublicKey;\n signatures: { initialize: string; enableTokenAcl: string; setup: string };\n}\n\n/** Options for {@link SolanaStablecoin.initializeStablecoin}: the mint part of {@link CreateStablecoinOptions}. */\nexport type InitializeStablecoinOptions = Pick<CreateStablecoinOptions, \"name\" | \"symbol\" | \"uri\" | \"decimals\" | \"enableAllowlist\" | \"mintKeypair\">;\n\n/** Options for {@link SolanaStablecoin.setupMinting}: the reserves and minter part of {@link CreateStablecoinOptions}. */\nexport type SetupMintingOptions = Pick<CreateStablecoinOptions, \"reserves\" | \"minter\">;\n\n/**\n * SolanaStablecoin — main SDK class.\n *\n * Acts as a facade over all SSS operations. Provides both\n * instruction builders (for composability) and convenience\n * methods for common workflows.\n */\nexport class SolanaStablecoin {\n /** The Anchor program instance. */\n public readonly program: Program;\n /** The Solana connection. */\n public readonly connection: Connection;\n /** The SSS-Token program ID. */\n public readonly programId: PublicKey;\n /** The transfer hook program ID. */\n public readonly hookProgramId: PublicKey;\n /** The signing wallet, if the client was created with one. */\n public readonly wallet?: AnchorProvider[\"wallet\"];\n /** ThawGate policies and holder flows (unlock, explain, freeze-if-invalid) for this client's mints. */\n public readonly gate: GateClient;\n\n private constructor(\n program: Program,\n connection: Connection,\n programId: PublicKey,\n hookProgramId: PublicKey,\n wallet: AnchorProvider[\"wallet\"] | undefined,\n gateProgramId: PublicKey | undefined,\n commitment: Commitment,\n ) {\n this.program = program;\n this.connection = connection;\n this.programId = programId;\n this.hookProgramId = hookProgramId;\n this.wallet = wallet;\n this.gate = new GateClient(connection, wallet, { gateProgramId, commitment });\n }\n\n /**\n * Creates a new SolanaStablecoin instance.\n *\n * Primary static factory method as required by the SSS PRD specification.\n * Accepts a Connection object directly (PRD pattern) or creates one from config.rpcUrl.\n *\n * @param connectionOrConfig - A Solana Connection, or SSSClientConfig\n * @param configOrWallet - SSSClientConfig if first arg is Connection, or wallet\n * @param wallet - Anchor wallet (optional for read-only)\n * @returns A new SolanaStablecoin instance\n */\n static async create(\n connectionOrConfig: Connection | SSSClientConfig,\n configOrWallet?: SSSClientConfig | AnchorProvider[\"wallet\"],\n wallet?: AnchorProvider[\"wallet\"],\n ): Promise<SolanaStablecoin> {\n let config: SSSClientConfig;\n let resolvedWallet: AnchorProvider[\"wallet\"] | undefined;\n\n if (connectionOrConfig instanceof Connection) {\n // PRD pattern: create(connection, config)\n config = (configOrWallet as SSSClientConfig) ?? { rpcUrl: \"\" };\n // Override rpcUrl since we already have a connection\n config = { ...config, rpcUrl: config.rpcUrl || \"provided-via-connection\" };\n resolvedWallet = wallet;\n } else {\n // Legacy pattern: create(config, wallet?)\n config = connectionOrConfig;\n resolvedWallet = configOrWallet as AnchorProvider[\"wallet\"] | undefined;\n }\n\n return SolanaStablecoin.fromConfig(config, resolvedWallet);\n }\n\n /**\n * Creates a new SolanaStablecoin instance from configuration.\n *\n * Alias for {@link SolanaStablecoin.create} — kept for backward compatibility.\n *\n * @param config - Client configuration\n * @param walletOrKeypair - Anchor wallet or a Keypair (optional for read-only)\n * @returns A new SolanaStablecoin instance\n */\n static fromConfig(\n config: SSSClientConfig,\n walletOrKeypair?: AnchorProvider[\"wallet\"] | Keypair,\n ): SolanaStablecoin {\n if (!config.rpcUrl) {\n throw new ConfigError(\"rpcUrl is required\");\n }\n const wallet = walletOrKeypair instanceof Keypair ? keypairWallet(walletOrKeypair) : walletOrKeypair;\n const commitment = config.commitment ?? \"confirmed\";\n\n const connection = new Connection(\n config.rpcUrl,\n config.commitment ?? \"confirmed\",\n );\n\n // Default: the devnet deployments (localnet uses the same IDs).\n const programId = config.programId ?? SSS_TOKEN_PROGRAM_ID;\n const hookProgramId = config.hookProgramId ?? TRANSFER_HOOK_PROGRAM_ID;\n\n // Validate program IDs — reject placeholders and missing IDs\n validateProgramId(programId, \"SSS Token program ID (programId)\");\n validateProgramId(hookProgramId, \"Transfer Hook program ID (hookProgramId)\");\n\n // After validation, we know these are defined and valid\n const validProgramId = programId!;\n const validHookProgramId = hookProgramId!;\n\n // Create a read-only provider if no wallet is provided\n const provider = wallet\n ? new AnchorProvider(connection, wallet, {\n commitment,\n // The blockhash and preflight at the same level as confirmation (\"Blockhash not found\" otherwise).\n preflightCommitment: commitment,\n skipPreflight: config.skipPreflight ?? false,\n })\n : ({\n connection,\n publicKey: PublicKey.default,\n } as unknown as AnchorProvider);\n\n // Create program with the actual IDL bundled with the SDK.\n const ProgramCtor: new (...args: unknown[]) => Program = Program as unknown as new (...args: unknown[]) => Program;\n const program = new ProgramCtor(\n { ...IDL, address: validProgramId.toBase58() } as any,\n provider,\n );\n\n return new SolanaStablecoin(program, connection, validProgramId, validHookProgramId, wallet, config.gateProgramId, commitment);\n }\n\n // ============================================================================\n // Issuer: SSS-ACL stablecoins gated by ThawGate\n // ============================================================================\n\n private requireWallet(what: string): AnchorProvider[\"wallet\"] {\n if (!this.wallet) throw new ConfigError(`${what} needs a wallet: SolanaStablecoin.fromConfig(config, wallet)`);\n return this.wallet;\n }\n\n /**\n * sss-token `enable_token_acl`: creates the mint's Token ACL config (gate = ThawGate, permissionless thaw and\n * freeze on) and its ThawGate policy, with the issuer's master authority as policy authority and sss-token as\n * the blacklist/allowlist program. MasterAuthority only.\n */\n async enableTokenAcl(mint: PublicKey, policy: PolicyInput, authority?: PublicKey): Promise<TransactionInstruction[]> {\n const signer = authority ?? this.requireWallet(\"enableTokenAcl\").publicKey;\n const gateProgram = this.gate.gateProgramId;\n try {\n const ix = await this.program.methods\n .enableTokenAcl(toGatePolicyConfig(policy))\n .accountsStrict({\n authority: signer,\n config: findConfigPda(mint, this.programId)[0],\n authorityRole: findRolePda(mint, signer, RoleType.MasterAuthority, this.programId)[0],\n mint,\n tokenAclProgram: TOKEN_ACL_PROGRAM_ID,\n mintConfig: findMintConfigPda(mint),\n gateProgram,\n gatePolicy: this.gate.policyAddress(mint),\n thawExtraMetas: findThawExtraMetasPda(mint, gateProgram),\n freezeExtraMetas: findFreezeExtraMetasPda(mint, gateProgram),\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n return [ix];\n } catch (error) {\n throw parseError(error);\n }\n }\n\n /**\n * Creates an SSS-ACL stablecoin gated by ThawGate, ready to mint, in three transactions:\n * 1. `initialize` with the SSS-ACL preset (accounts start frozen);\n * 2. `enable_token_acl` with `policy`;\n * 3. the minter role and quota, the reserve attestor, and (when the wallet is the attestor) a first reserve post.\n *\n * The wallet becomes MasterAuthority and the policy authority. Minting needs reserves: every `mint_tokens`\n * checks `supply + amount <= reserves` and that the post is fresher than `maxStalenessSeconds`.\n */\n async createStablecoin(opts: CreateStablecoinOptions): Promise<CreatedStablecoin> {\n const allowlistOn = (opts.policy.allowlistMode ?? \"off\") !== \"off\";\n const { mint, signature: initialize } = await this.initializeStablecoin({ ...opts, enableAllowlist: opts.enableAllowlist ?? allowlistOn });\n const enableTokenAcl = await this.sendEnableTokenAcl(mint, opts.policy);\n const setup = await this.setupMinting(mint, opts);\n return { mint, signatures: { initialize, enableTokenAcl, setup } };\n }\n\n // The three transactions of createStablecoin, one method each, so a UI can show every signature and retry a failed\n // step on the same mint. Any order after initializeStablecoin works: setupMinting doesn't need Token ACL.\n\n /** createStablecoin's 1st transaction: `initialize` with the SSS-ACL preset (accounts start frozen). Allowlist off by default. */\n async initializeStablecoin(opts: InitializeStablecoinOptions): Promise<{ mint: PublicKey; signature: string }> {\n const authority = this.requireWallet(\"initializeStablecoin\").publicKey;\n const args = { ...sssAclPreset(opts.name, opts.symbol, opts.uri ?? \"\", opts.decimals ?? 6), enableAllowlist: opts.enableAllowlist ?? false };\n const { instructions, mint, mintKeypair } = await this.initialize(authority, args, opts.mintKeypair);\n const signature = await this.send(instructions, [mintKeypair]);\n return { mint, signature };\n }\n\n /** createStablecoin's 2nd transaction: `enable_token_acl` with `policy`, sent with the compute budget it needs. */\n async sendEnableTokenAcl(mint: PublicKey, policy: PolicyInput): Promise<string> {\n const authority = this.requireWallet(\"sendEnableTokenAcl\").publicKey;\n // enable_token_acl makes four CPIs (Token ACL create_config + toggle, the metadata field, the gate's init_policy).\n return this.send([\n ComputeBudgetProgram.setComputeUnitLimit({ units: 400_000 }),\n ...(await this.enableTokenAcl(mint, policy, authority)),\n ]);\n }\n\n /**\n * createStablecoin's 3rd transaction: the minter role and quota, the reserve attestor, and (when the wallet is the\n * attestor) a first reserve post.\n */\n async setupMinting(mint: PublicKey, opts: SetupMintingOptions): Promise<string> {\n const authority = this.requireWallet(\"setupMinting\").publicKey;\n const amount = toBN(opts.reserves.amount);\n const attestor = opts.reserves.attestor ?? authority;\n const setup: TransactionInstruction[] = [];\n if (opts.minter !== false) {\n const m = opts.minter ?? {};\n setup.push(...(await this.updateMinter(mint, authority, m.address ?? authority, toBN(m.quota ?? amount), m.period ?? QuotaPeriod.Lifetime)));\n }\n const reserves = this.reserves(mint);\n setup.push(...(await reserves.setReserveAttestor(authority, attestor, opts.reserves.maxStalenessSeconds ?? 86_400)));\n if (attestor.equals(authority)) {\n setup.push(...(await reserves.attestReserves(authority, amount, await this.clusterTime(), opts.reserves.reportUri)));\n }\n return this.send(setup);\n }\n\n /**\n * The cluster's unix time (Clock sysvar). Reserve posts must use it: `attest_reserves` refuses an `as_of` in the\n * future, and a local clock can run ahead of the cluster.\n */\n async clusterTime(): Promise<number> {\n const clock = await this.connection.getAccountInfo(SYSVAR_CLOCK_PUBKEY);\n if (!clock) throw new Error(\"Clock sysvar not found\");\n return Number(clock.data.readBigInt64LE(32));\n }\n\n /** Sign with the client's wallet (plus `signers`), send, and confirm. Returns the signature. */\n async send(instructions: TransactionInstruction[], signers: Signer[] = []): Promise<string> {\n this.requireWallet(\"send\");\n return this.gate.send(instructions, signers);\n }\n\n // ============================================================================\n // Token Operations\n // ============================================================================\n\n /**\n * Initializes a new stablecoin.\n *\n * @param authority - The authority's public key (becomes MasterAuthority)\n * @param args - Initialization arguments (use sss1Preset or sss2Preset)\n * @param mintKeypair - Optional mint keypair (generated if not provided)\n */\n async initialize(\n authority: PublicKey,\n args: InitializeArgs,\n mintKeypair?: Keypair,\n ): Promise<{\n instructions: TransactionInstruction[];\n mint: PublicKey;\n mintKeypair: Keypair;\n }> {\n return tokenOps.initialize(this.program, authority, args, mintKeypair);\n }\n\n /**\n * Mints tokens to a recipient.\n */\n async mintTokens(\n mint: PublicKey,\n minter: PublicKey,\n recipient: PublicKey,\n amount: BN,\n ): Promise<TransactionInstruction[]> {\n return tokenOps.mintTokens(this.program, mint, minter, recipient, amount);\n }\n\n /**\n * Burns tokens from the burner's account.\n */\n async burnTokens(\n mint: PublicKey,\n burner: PublicKey,\n amount: BN,\n ): Promise<TransactionInstruction[]> {\n return tokenOps.burnTokens(this.program, mint, burner, amount);\n }\n\n /**\n * Freezes a target token account.\n */\n async freezeAccount(\n mint: PublicKey,\n operator: PublicKey,\n targetTokenAccount: PublicKey,\n operatorRole?: RoleType.MasterAuthority | RoleType.Blacklister,\n ): Promise<TransactionInstruction[]> {\n return tokenOps.freezeAccount(\n this.program,\n mint,\n operator,\n targetTokenAccount,\n operatorRole,\n );\n }\n\n /**\n * Thaws a frozen token account.\n */\n async thawAccount(\n mint: PublicKey,\n operator: PublicKey,\n targetTokenAccount: PublicKey,\n operatorRole?: RoleType.MasterAuthority | RoleType.Blacklister,\n ): Promise<TransactionInstruction[]> {\n return tokenOps.thawAccount(\n this.program,\n mint,\n operator,\n targetTokenAccount,\n operatorRole,\n );\n }\n\n /**\n * Pauses all token operations.\n */\n async pause(\n mint: PublicKey,\n operator: PublicKey,\n operatorRole?: RoleType.Pauser | RoleType.MasterAuthority,\n ): Promise<TransactionInstruction[]> {\n return tokenOps.pause(this.program, mint, operator, operatorRole);\n }\n\n /**\n * Resumes all token operations.\n */\n async unpause(\n mint: PublicKey,\n operator: PublicKey,\n operatorRole?: RoleType.Pauser | RoleType.MasterAuthority,\n ): Promise<TransactionInstruction[]> {\n return tokenOps.unpause(this.program, mint, operator, operatorRole);\n }\n\n // ============================================================================\n // Role Operations\n // ============================================================================\n\n /**\n * Creates or updates a minter with a quota.\n */\n async updateMinter(\n mint: PublicKey,\n authority: PublicKey,\n minter: PublicKey,\n limit: BN,\n period: QuotaPeriod,\n ): Promise<TransactionInstruction[]> {\n return roleOps.updateMinter(\n this.program,\n mint,\n authority,\n minter,\n limit,\n period,\n );\n }\n\n /**\n * Creates or updates a role for a given key.\n */\n async updateRoles(\n mint: PublicKey,\n authority: PublicKey,\n holder: PublicKey,\n role: RoleType,\n active: boolean,\n ): Promise<TransactionInstruction[]> {\n return roleOps.updateRoles(\n this.program,\n mint,\n authority,\n holder,\n role,\n active,\n );\n }\n\n /**\n * Transfers MasterAuthority to a new key.\n */\n async transferAuthority(\n mint: PublicKey,\n authority: PublicKey,\n newAuthority: PublicKey,\n ): Promise<TransactionInstruction[]> {\n return roleOps.transferAuthority(\n this.program,\n mint,\n authority,\n newAuthority,\n );\n }\n\n // ============================================================================\n // Module Accessors\n // ============================================================================\n\n /**\n * Returns a ComplianceModule for SSS-2 operations on a specific mint.\n */\n compliance(mint: PublicKey): ComplianceModule {\n return new ComplianceModule(this.program, mint);\n }\n\n /**\n * Returns a PrivacyModule for SSS-3 operations on a specific mint.\n */\n privacy(mint: PublicKey): PrivacyModule {\n return new PrivacyModule(mint);\n }\n\n /**\n * Returns a ReservesModule for the reserve attestation that `mint_tokens` checks.\n */\n reserves(mint: PublicKey): ReservesModule {\n return new ReservesModule(this.program, mint);\n }\n\n // ============================================================================\n // Account Fetchers\n // ============================================================================\n\n /**\n * Typed account fetch helper.\n * Wraps Anchor's program.account access with proper typing.\n */\n private fetchAccount(accountName: string): { fetch: (pda: PublicKey) => Promise<unknown>; all: (filters?: unknown[]) => Promise<unknown[]> } {\n const accounts = this.program.account as Record<string, { fetch: (pda: PublicKey) => Promise<unknown>; all: (filters?: unknown[]) => Promise<unknown[]> }>;\n return accounts[accountName];\n }\n\n /**\n * Fetches the StablecoinConfig for a mint.\n */\n async getConfig(mint: PublicKey): Promise<StablecoinConfig> {\n const [configPda] = findConfigPda(mint, this.programId);\n try {\n const account = await this.fetchAccount(\"stablecoinConfig\").fetch(configPda);\n return account as StablecoinConfig;\n } catch (error) {\n throw new AccountNotFoundError(\"StablecoinConfig\", configPda.toBase58());\n }\n }\n\n /**\n * Fetches the PauseState for a mint.\n */\n async getPauseState(mint: PublicKey): Promise<PauseState> {\n const [pausePda] = findPauseStatePda(mint, this.programId);\n try {\n const account = await this.fetchAccount(\"pauseState\").fetch(pausePda);\n return account as PauseState;\n } catch (error) {\n throw new AccountNotFoundError(\"PauseState\", pausePda.toBase58());\n }\n }\n\n /**\n * Fetches a role record for a given holder and role.\n */\n async getRoleRecord(\n mint: PublicKey,\n holder: PublicKey,\n role: RoleType,\n ): Promise<RoleRecord | null> {\n const [rolePda] = findRolePda(mint, holder, role, this.programId);\n try {\n const account = await this.fetchAccount(\"roleRecord\").fetch(rolePda);\n return account as RoleRecord;\n } catch {\n return null;\n }\n }\n\n /**\n * Fetches a minter's quota.\n */\n async getMinterQuota(\n mint: PublicKey,\n minter: PublicKey,\n ): Promise<MinterQuota | null> {\n const [quotaPda] = findQuotaPda(mint, minter, this.programId);\n try {\n const account = await this.fetchAccount(\"minterQuota\").fetch(quotaPda);\n return account as MinterQuota;\n } catch {\n return null;\n }\n }\n\n /**\n * Checks if a wallet has a specific active role.\n */\n async hasRole(\n mint: PublicKey,\n holder: PublicKey,\n role: RoleType,\n ): Promise<boolean> {\n const record = await this.getRoleRecord(mint, holder, role);\n return record?.active ?? false;\n }\n\n /**\n * Checks if the token is currently paused.\n */\n async isPaused(mint: PublicKey): Promise<boolean> {\n const state = await this.getPauseState(mint);\n return state.paused;\n }\n}\n","/**\n * @module sas\n * @description Solana Attestation Service (SAS) instructions on @solana/web3.js v1: credentials, schemas and\n * attestations, enough to issue the KYC credential a ThawGate policy checks.\n *\n * Hand-built from sas-lib 1.0.10's generated code (sas-lib is @solana/kit-based); tests/sas.test.ts pins each builder\n * byte-for-byte against it.\n *\n * A credential you create yourself is a **self-issued test credential**: it proves the flow, not anyone's identity.\n * In production the policy names a KYC provider's credential and schema, and the provider issues attestations.\n */\n\nimport { PublicKey, SystemProgram, TransactionInstruction } from \"@solana/web3.js\";\nimport { SAS_PROGRAM_ID } from \"../programs\";\n\nexport const SAS_IX = { createCredential: 0, createSchema: 1, createAttestation: 6, closeAttestation: 7 } as const;\n\n/** PDA seeds are at most 32 bytes, and SAS seeds credential and schema PDAs with the name. */\nconst MAX_NAME_BYTES = 32;\n\nfunction nameSeed(name: string, what: string): Buffer {\n const b = Buffer.from(name, \"utf8\");\n if (b.length === 0 || b.length > MAX_NAME_BYTES) throw new Error(`${what} name must be 1-${MAX_NAME_BYTES} bytes of UTF-8 (got ${b.length})`);\n return b;\n}\n\n/** `[\"credential\", authority, name]`. */\nexport function findCredentialPda(authority: PublicKey, name: string): PublicKey {\n return PublicKey.findProgramAddressSync([Buffer.from(\"credential\"), authority.toBuffer(), nameSeed(name, \"credential\")], SAS_PROGRAM_ID)[0];\n}\n\n/** `[\"schema\", credential, name, version]`. A new schema is version 1. */\nexport function findSchemaPda(credential: PublicKey, name: string, version = 1): PublicKey {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"schema\"), credential.toBuffer(), nameSeed(name, \"schema\"), Buffer.from([version])],\n SAS_PROGRAM_ID,\n )[0];\n}\n\n/** `[\"attestation\", credential, schema, nonce]`. ThawGate policies use `nonce = the holder's wallet`. */\nexport function findAttestationPda(credential: PublicKey, schema: PublicKey, nonce: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync([Buffer.from(\"attestation\"), credential.toBuffer(), schema.toBuffer(), nonce.toBuffer()], SAS_PROGRAM_ID)[0];\n}\n\n/** SAS's event authority, `[\"__event_authority\"]`: `close_attestation` emits its event through it. */\nexport const SAS_EVENT_AUTHORITY = PublicKey.findProgramAddressSync([Buffer.from(\"__event_authority\")], SAS_PROGRAM_ID)[0];\n\nconst u32 = (n: number) => {\n const b = Buffer.alloc(4);\n b.writeUInt32LE(n);\n return b;\n};\nconst str = (s: string) => {\n const b = Buffer.from(s, \"utf8\");\n return Buffer.concat([u32(b.length), b]);\n};\nconst bytes = (d: Uint8Array) => Buffer.concat([u32(d.length), Buffer.from(d)]);\n\n/** A credential: `authority` and the `signers` may issue attestations under it. Returns the instruction and its PDA. */\nexport function createCredentialIx(args: { payer: PublicKey; authority: PublicKey; name: string; signers?: PublicKey[] }): {\n instruction: TransactionInstruction;\n credential: PublicKey;\n} {\n const credential = findCredentialPda(args.authority, args.name);\n const signers = args.signers ?? [args.authority];\n const data = Buffer.concat([Buffer.from([SAS_IX.createCredential]), str(args.name), u32(signers.length), ...signers.map((s) => s.toBuffer())]);\n const instruction = new TransactionInstruction({\n programId: SAS_PROGRAM_ID,\n keys: [\n { pubkey: args.payer, isSigner: true, isWritable: true },\n { pubkey: credential, isSigner: false, isWritable: true },\n { pubkey: args.authority, isSigner: true, isWritable: false },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ],\n data,\n });\n return { instruction, credential };\n}\n\n/** A schema under a credential. `layout` holds SAS compact type codes (0 = u8, 12 = String, …), one per field. */\nexport function createSchemaIx(args: {\n payer: PublicKey;\n authority: PublicKey;\n credential: PublicKey;\n name: string;\n description: string;\n layout: number[];\n fieldNames: string[];\n}): { instruction: TransactionInstruction; schema: PublicKey } {\n if (args.layout.length !== args.fieldNames.length) throw new Error(\"schema layout and fieldNames must have the same length\");\n const schema = findSchemaPda(args.credential, args.name);\n const data = Buffer.concat([\n Buffer.from([SAS_IX.createSchema]),\n str(args.name),\n str(args.description),\n bytes(Uint8Array.from(args.layout)),\n u32(args.fieldNames.length),\n ...args.fieldNames.map(str),\n ]);\n const instruction = new TransactionInstruction({\n programId: SAS_PROGRAM_ID,\n keys: [\n { pubkey: args.payer, isSigner: true, isWritable: true },\n { pubkey: args.authority, isSigner: true, isWritable: false },\n { pubkey: args.credential, isSigner: false, isWritable: false },\n { pubkey: schema, isSigner: false, isWritable: true },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ],\n data,\n });\n return { instruction, schema };\n}\n\n/**\n * An attestation of `data` (encoded to the schema's layout) for `nonce`. `expiry` is a unix timestamp; 0 = never.\n * `authority` must be one of the credential's signers.\n */\nexport function createAttestationIx(args: {\n payer: PublicKey;\n authority: PublicKey;\n credential: PublicKey;\n schema: PublicKey;\n nonce: PublicKey;\n data: Uint8Array;\n expiry: number | bigint;\n}): { instruction: TransactionInstruction; attestation: PublicKey } {\n const attestation = findAttestationPda(args.credential, args.schema, args.nonce);\n const expiry = Buffer.alloc(8);\n expiry.writeBigInt64LE(BigInt(args.expiry));\n const data = Buffer.concat([Buffer.from([SAS_IX.createAttestation]), args.nonce.toBuffer(), bytes(args.data), expiry]);\n const instruction = new TransactionInstruction({\n programId: SAS_PROGRAM_ID,\n keys: [\n { pubkey: args.payer, isSigner: true, isWritable: true },\n { pubkey: args.authority, isSigner: true, isWritable: false },\n { pubkey: args.credential, isSigner: false, isWritable: false },\n { pubkey: args.schema, isSigner: false, isWritable: false },\n { pubkey: attestation, isSigner: false, isWritable: true },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ],\n data,\n });\n return { instruction, attestation };\n}\n\n/** Close (revoke) an attestation; the rent goes to `payer`. Under a ThawGate SAS policy the holder becomes freezable. */\nexport function closeAttestationIx(args: { payer: PublicKey; authority: PublicKey; credential: PublicKey; attestation: PublicKey }): TransactionInstruction {\n return new TransactionInstruction({\n programId: SAS_PROGRAM_ID,\n keys: [\n { pubkey: args.payer, isSigner: true, isWritable: true },\n { pubkey: args.authority, isSigner: true, isWritable: false },\n { pubkey: args.credential, isSigner: false, isWritable: false },\n { pubkey: args.attestation, isSigner: false, isWritable: true },\n { pubkey: SAS_EVENT_AUTHORITY, isSigner: false, isWritable: false },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n { pubkey: SAS_PROGRAM_ID, isSigner: false, isWritable: false },\n ],\n data: Buffer.from([SAS_IX.closeAttestation]),\n });\n}\n\n/**\n * The KYC schema layout ThawGate reads: `kyc_level: u8` must come first (the gate reads it at a fixed offset when the\n * policy sets `min_kyc_level`), then `country: String`.\n */\nexport const KYC_SCHEMA = {\n layout: [0, 12],\n fieldNames: [\"kyc_level\", \"country\"],\n} as const;\n\n/** Attestation data for {@link KYC_SCHEMA}: u8 kyc_level, then u32-length-prefixed UTF-8 country. */\nexport function encodeKycData(args: { kycLevel: number; country: string }): Uint8Array {\n if (!Number.isInteger(args.kycLevel) || args.kycLevel < 0 || args.kycLevel > 255) throw new Error(\"kycLevel must be 0-255\");\n return Buffer.concat([Buffer.from([args.kycLevel]), str(args.country)]);\n}\n","/**\n * @module presets/sss1\n * @description SSS-1 preset configuration — basic stablecoin.\n *\n * SSS-1 provides: mint, burn, freeze/thaw, pause/unpause, role management.\n * No compliance features (blacklist, seize, transfer hook).\n */\n\nimport type { InitializeArgs } from \"../types\";\n\n/**\n * Default initialization arguments for an SSS-1 stablecoin.\n *\n * @param name - Stablecoin name\n * @param symbol - Ticker symbol\n * @param uri - Metadata URI\n * @param decimals - Decimal places (default: 6)\n * @returns InitializeArgs configured for SSS-1\n */\nexport function sss1Preset(\n name: string,\n symbol: string,\n uri: string,\n decimals = 6,\n): InitializeArgs {\n return {\n name,\n symbol,\n uri,\n decimals,\n enablePermanentDelegate: false,\n enableTransferHook: false,\n defaultAccountFrozen: false,\n hookProgramId: undefined,\n };\n}\n\n/**\n * SSS-1 feature flags for documentation and validation.\n */\nexport const SSS1_FEATURES = {\n mint: true,\n burn: true,\n freeze: true,\n pause: true,\n roles: true,\n blacklist: false,\n seize: false,\n transferHook: false,\n permanentDelegate: false,\n} as const;\n","/**\n * @module presets/sss2\n * @description SSS-2 preset configuration — enhanced compliance stablecoin.\n *\n * SSS-2 extends SSS-1 with: blacklist, seize (permanent delegate),\n * transfer hook for real-time compliance, and default-frozen accounts.\n * The strict hook mode (`ComplianceMode.Hook`): every transfer pays for the hook. New mints default to SSS-ACL.\n */\n\nimport { PublicKey } from \"@solana/web3.js\";\nimport type { InitializeArgs } from \"../types\";\nimport { ComplianceMode } from \"../types\";\n\n/**\n * Default initialization arguments for an SSS-2 stablecoin.\n *\n * @param name - Stablecoin name\n * @param symbol - Ticker symbol\n * @param uri - Metadata URI\n * @param hookProgramId - The transfer hook program ID\n * @param decimals - Decimal places (default: 6)\n * @returns InitializeArgs configured for SSS-2\n */\nexport function sss2Preset(\n name: string,\n symbol: string,\n uri: string,\n hookProgramId: PublicKey,\n decimals = 6,\n): InitializeArgs {\n return {\n name,\n symbol,\n uri,\n decimals,\n enablePermanentDelegate: true,\n enableTransferHook: true,\n defaultAccountFrozen: true,\n hookProgramId,\n complianceMode: ComplianceMode.Hook,\n };\n}\n\n/**\n * SSS-2 feature flags for documentation and validation.\n */\nexport const SSS2_FEATURES = {\n mint: true,\n burn: true,\n freeze: true,\n pause: true,\n roles: true,\n blacklist: true,\n seize: true,\n transferHook: true,\n permanentDelegate: true,\n} as const;\n","/**\n * @module presets/sss3\n * @description SSS-3 preset configuration — private stablecoin.\n *\n * SSS-3 extends SSS-2 with: confidential transfers (via SPL Token-2022\n * Confidential Transfer extension), and allowlist-based access control.\n * Only allowlisted wallets can transact with the token.\n */\n\nimport { PublicKey } from \"@solana/web3.js\";\nimport type { InitializeArgs } from \"../types\";\n\n/**\n * Default initialization arguments for an SSS-3 stablecoin.\n *\n * @param name - Stablecoin name\n * @param symbol - Ticker symbol\n * @param uri - Metadata URI\n * @param hookProgramId - The transfer hook program ID\n * @param decimals - Decimal places (default: 6)\n * @returns InitializeArgs configured for SSS-3\n */\nexport function sss3Preset(\n name: string,\n symbol: string,\n uri: string,\n hookProgramId: PublicKey,\n decimals = 6,\n): InitializeArgs {\n return {\n name,\n symbol,\n uri,\n decimals,\n enablePermanentDelegate: true,\n enableTransferHook: true,\n defaultAccountFrozen: true,\n hookProgramId,\n enableConfidentialTransfers: true,\n enableAllowlist: true,\n };\n}\n\n/**\n * SSS-3 feature flags for documentation and validation.\n */\nexport const SSS3_FEATURES = {\n mint: true,\n burn: true,\n freeze: true,\n pause: true,\n roles: true,\n blacklist: true,\n seize: true,\n transferHook: true,\n permanentDelegate: true,\n confidentialTransfers: true,\n allowlist: true,\n} as const;\n","/**\n * @module presets/sssBoth\n * @description SSS-Both preset — Token ACL gating (see sssAcl) plus the SSS transfer hook on every transfer.\n *\n * The hook adds a per-transfer pause and blacklist check on top of the gate's per-account check at thaw. Note:\n * while the mint is paused, the hook also rejects `seize` (its PauseState check has no seize exception).\n */\n\nimport { PublicKey } from \"@solana/web3.js\";\nimport type { InitializeArgs } from \"../types\";\nimport { ComplianceMode } from \"../types\";\n\n/**\n * Default initialization arguments for an SSS-Both stablecoin.\n *\n * @param name - Stablecoin name\n * @param symbol - Ticker symbol\n * @param uri - Metadata URI\n * @param hookProgramId - The transfer hook program ID\n * @param decimals - Decimal places (default: 6)\n * @returns InitializeArgs configured for SSS-Both\n */\nexport function sssBothPreset(\n name: string,\n symbol: string,\n uri: string,\n hookProgramId: PublicKey,\n decimals = 6,\n): InitializeArgs {\n return {\n name,\n symbol,\n uri,\n decimals,\n enablePermanentDelegate: true,\n enableTransferHook: true,\n defaultAccountFrozen: true,\n hookProgramId,\n complianceMode: ComplianceMode.Both,\n };\n}\n\n/**\n * SSS-Both feature flags for documentation and validation.\n */\nexport const SSS_BOTH_FEATURES = {\n mint: true,\n burn: true,\n freeze: true,\n pause: true,\n roles: true,\n blacklist: true,\n seize: true,\n transferHook: true,\n permanentDelegate: true,\n tokenAcl: true,\n defaultAccountFrozen: true,\n} as const;\n","/**\n * @module @thawgate/sdk\n * @description Solana Stablecoin Standard (SSS) TypeScript SDK.\n *\n * This package provides a complete TypeScript API for interacting\n * with SSS stablecoins on Solana: SSS-ACL (Token ACL gated by ThawGate,\n * the default), SSS-Both (Token ACL + transfer hook), SSS-1 (basic)\n * and SSS-2 (transfer hook) configurations.\n *\n * @example\n * ```ts\n * import { SolanaStablecoin, sssAclPreset, SssError } from \"@thawgate/sdk\";\n *\n * const client = SolanaStablecoin.fromConfig({\n * rpcUrl: \"https://api.devnet.solana.com\",\n * });\n *\n * // Initialize a Token ACL stablecoin (then call enable_token_acl as the master authority)\n * const { instructions, mint } = await client.initialize(\n * authority.publicKey,\n * sssAclPreset(\"USD Stablecoin\", \"USDS\", \"https://meta.example.com\"),\n * );\n * ```\n */\n\n// Main client\nexport { SolanaStablecoin } from \"./client\";\nexport type { CreateStablecoinOptions, CreatedStablecoin, InitializeStablecoinOptions, SetupMintingOptions } from \"./client\";\n\n// ThawGate gate client (any Token ACL mint gated by ThawGate; also SolanaStablecoin#gate)\nexport { GateClient, toGatePolicyConfig } from \"./gate/client\";\nexport type { AllowlistMode, PolicyInput, GatePolicy, Explanation, FreezeResult, GateWallet, GateClientOptions } from \"./gate/client\";\n\n// A wallet from a Keypair, for scripts and servers\nexport { keypairWallet } from \"./wallet\";\nexport type { KeypairWallet } from \"./wallet\";\n\n// The BN the SDK's amounts use. Imported from bn.js, not anchor: anchor's CJS exports BN through a getter that native\n// Node ESM can't name-import (\"Named export 'BN' not found\").\nexport { default as BN } from \"bn.js\";\n\n// Gate reason codes (also published dependency-free as \"@thawgate/sdk/reasons\")\nexport {\n THAWGATE_GATE_ID,\n THAW_ALLOW_CODES,\n FLAG_CODES,\n STRUCTURAL_DENY_CODES,\n GATE_DENY_ERRORS,\n isTgCode,\n describe as describeGateCode,\n parseGateLogs,\n classifyGateLogs,\n} from \"./gate/reasons\";\nexport type {\n GateAction,\n TgCode,\n ThawAllowCode,\n FlagCode,\n StructuralDenyCode,\n GateLogs,\n GateVerdict,\n} from \"./gate/reasons\";\n\n// Token ACL (sRFC 37) instructions on web3.js v1\nexport {\n TOKEN_ACL_IX,\n MINT_CONFIG_SIZE,\n findMintConfigPda,\n findFlagAccountPda,\n findThawExtraMetasPda,\n findFreezeExtraMetasPda,\n decodeMintConfig,\n fetchMintConfig,\n setGatingProgramIx,\n togglePermissionlessIx,\n permissionlessIx,\n} from \"./gate/tokenAcl\";\nexport type { MintConfig, PermissionlessKind, PermissionlessArgs } from \"./gate/tokenAcl\";\n\n// Solana Attestation Service: credentials, schemas, attestations (sas.createCredentialIx, sas.KYC_SCHEMA, …)\nexport * as sas from \"./sas\";\n\n// Program IDs (devnet deployments + upstream Token ACL / SAS / ABL)\nexport {\n SSS_TOKEN_PROGRAM_ID,\n TRANSFER_HOOK_PROGRAM_ID,\n THAWGATE_GATE_PROGRAM_ID,\n TOKEN_ACL_PROGRAM_ID,\n SAS_PROGRAM_ID,\n ABL_GATE_PROGRAM_ID,\n} from \"./programs\";\n\n// Types and enums\nexport {\n RoleType,\n QuotaPeriod,\n SSSPreset,\n ComplianceMode,\n} from \"./types\";\n\nexport type {\n StablecoinConfig,\n RoleRecord,\n MinterQuota,\n BlacklistEntry,\n PauseState,\n InitializeArgs,\n UpdateMinterArgs,\n UpdateRolesArgs,\n AddToBlacklistArgs,\n SSSClientConfig,\n TransactionResult,\n TransactionOptions,\n StablecoinInitializedEvent,\n AuthorityTransferredEvent,\n TokensSeizedEvent,\n} from \"./types\";\n\n// Errors — internal names\nexport {\n SSSError,\n TransactionError,\n AuthorizationError,\n TokenPausedError,\n FeatureNotEnabledError,\n BlacklistedError,\n QuotaExceededError,\n ConfigError,\n AccountNotFoundError,\n parseError,\n programError,\n SSS_TOKEN_ERRORS,\n THAWGATE_GATE_ERRORS,\n} from \"./errors\";\nexport type { ProgramErrorInfo } from \"./errors\";\n\n// Errors — spec-required names (HIGH-005)\nexport {\n SssError,\n SssInitError,\n SssMintError,\n SssComplianceError,\n SssRpcError,\n} from \"./errors\";\n\n// Presets — spec-required Presets namespace (HIGH-005)\nimport { SSS1_FEATURES } from \"./presets/sss1\";\nimport { SSS2_FEATURES } from \"./presets/sss2\";\nimport { SSS3_FEATURES } from \"./presets/sss3\";\nimport { SSS_ACL_FEATURES } from \"./presets/sssAcl\";\nimport { SSS_BOTH_FEATURES } from \"./presets/sssBoth\";\n\n/**\n * SSS preset configurations.\n *\n * Spec-required export: `Presets.SSS_1` and `Presets.SSS_2`.\n * Each value provides the feature flags for the respective standard. `SSS_ACL` is the default for new mints.\n *\n * @example\n * ```ts\n * import { Presets } from \"@thawgate/sdk\";\n * const hasPermanentDelegate = Presets.SSS_2.permanentDelegate; // true\n * ```\n */\nexport const Presets = {\n /** SSS-ACL (default): Token ACL gated by ThawGate — no transfer hook. */\n SSS_ACL: SSS_ACL_FEATURES,\n /** SSS-Both: Token ACL + the transfer hook. */\n SSS_BOTH: SSS_BOTH_FEATURES,\n /** SSS-1: Basic stablecoin — no compliance extensions. */\n SSS_1: SSS1_FEATURES,\n /** SSS-2: Compliance stablecoin — with permanent delegate + transfer hook. */\n SSS_2: SSS2_FEATURES,\n /** SSS-3: Private stablecoin — confidential transfers + allowlist. */\n SSS_3: SSS3_FEATURES,\n} as const;\n\n// Preset factory functions\nexport { sssAclPreset, SSS_ACL_FEATURES } from \"./presets/sssAcl\";\nexport { sssBothPreset, SSS_BOTH_FEATURES } from \"./presets/sssBoth\";\nexport { sss1Preset, SSS1_FEATURES } from \"./presets/sss1\";\nexport { sss2Preset, SSS2_FEATURES } from \"./presets/sss2\";\nexport { sss3Preset, SSS3_FEATURES } from \"./presets/sss3\";\n\n// PDA helpers\nexport {\n findConfigPda,\n findPauseStatePda,\n findRolePda,\n findQuotaPda,\n findBlacklistPda,\n findAllowlistPda,\n findExtraAccountMetaListPda,\n findReserveAttestationPda,\n} from \"./pda\";\n\n// Modules\nexport { ComplianceModule } from \"./modules/compliance\";\nexport { PrivacyModule } from \"./modules/privacy\";\nexport { ReservesModule } from \"./modules/reserves\";\nexport type { ReserveAttestation } from \"./modules/reserves\";\n\n// Base operations (for advanced usage)\nexport * as token from \"./base/token\";\nexport * as roles from \"./base/roles\";\n"]}