Blowfish Scan transaction API

Endpoints related to scanning blockchain transactions

OpenAPI Specification

blowfish-scan-transaction-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: API reference Download blocklist Scan transaction API
  version: '2022-06-01'
  description: The Blowfish API reference specification
  contact:
    name: Blowfish API Support
    email: contact@blowfish.xyz
    url: https://blowfish.xyz
  license:
    name: MIT License
    url: https://opensource.org/licenses/MIT
servers:
- url: https://free.api.blowfish.xyz
  description: API server for clients on the free plan
- url: https://api.blowfish.xyz
  description: API server for all other clients (e.g., Enterprise)
security:
- ApiKeyAuth: []
tags:
- name: Scan transaction
  description: Endpoints related to scanning blockchain transactions
paths:
  /ethereum/v0/mainnet/scan/transaction:
    post:
      tags:
      - Scan transaction
      summary: EVM
      operationId: scan-transaction-evm
      description: 'Scan a Ethereum/Polygon transaction in order to receive recommended actions, tailored warnings and human-readable simulation results explaining what the transaction will do.

        ### Supported networks

        | Network | Base URL |

        | --- | --- |

        | Ethereum Mainnet | https://api.blowfish.xyz/ethereum/v0/mainnet/scan/transaction |

        | Goerli Testnet | https://api.blowfish.xyz/ethereum/v0/goerli/scan/transaction |

        | Polygon Mainnet | https://api.blowfish.xyz/polygon/v0/mainnet/scan/transaction |

        Note:  The Ethereum and Polygon endpoints are equivalent when it comes to functionality as well as request and response formats.

        Note 2: If you are using a free, self-service API key from our Developer Portal, be sure to add the `free` subdomain (e.g., `https://free.api.blowfish.xyz`) to the above endpoints.

        '
      security:
      - ApiKeyAuth: []
      parameters:
      - name: language
        in: query
        description: The language to use in the returned human-readable warnings and simulation results
        schema:
          $ref: '#/components/schemas/Languages'
      - name: X-Api-Key
        in: header
        description: API Key
        required: true
        schema:
          $ref: '#/components/schemas/ApiKeyHeader'
      - name: X-Api-Version
        in: header
        description: Which version of the API to use
        schema:
          $ref: '#/components/schemas/ApiVersionHeader'
      - name: Content-Type
        in: header
        description: The expected return content type
        schema:
          $ref: '#/components/schemas/ContentType'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                txObject:
                  type: object
                  properties:
                    from:
                      type: string
                      description: Hex-representation address of transaction signer
                      example: '0xa725f1a12b69eb32a7aea885c826deffaad6e3f3'
                    to:
                      type: string
                      description: Hex-representation address of transaction recipient
                      example: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
                    data:
                      type: string
                      description: Hex-representation of ABI encoded call data
                      example: '0x095ea7b30000000000000000000000001d5071048370df50839c8879cdf5144ace4b3b3bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
                    value:
                      type: string
                      description: String representation of Ether/Matic (in Wei) to send with the transaction
                      example: '0'
                  required:
                  - from
                  - to
                  - data
                  - value
                metadata:
                  $ref: '#/components/schemas/RequestMetadata'
                userAccount:
                  $ref: '#/components/schemas/EvmUserAccount'
              required:
              - txObject
              - userAccount
              - metadata
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  action:
                    $ref: '#/components/schemas/ActionEnum'
                  warnings:
                    $ref: '#/components/schemas/Warning'
                  simulationResults:
                    type: object
                    properties:
                      expectedStateChanges:
                        type: array
                        items:
                          type: object
                          properties:
                            humanReadableDiff:
                              type: string
                              example: Send 10000 USDT
                              description: Computed explanation of the state change that can be directly presented to the end-user. While the API is still in development, we suggest integrators expose this in their signing UI if they encounter a `rawInfo.kind` they don't recognize.
                            rawInfo:
                              description: A machine-parsable state change object describing the state change.
                              oneOf:
                              - $ref: '#/components/schemas/EvmStateChangeErc20Transfer'
                              - $ref: '#/components/schemas/EvmStateChangeErc20Approval'
                              - $ref: '#/components/schemas/EvmStateChangeNativeAssetTransfer'
                              - $ref: '#/components/schemas/EvmStateChangeErc721Transfer'
                              - $ref: '#/components/schemas/EvmStateChangeErc721Approval'
                              - $ref: '#/components/schemas/EvmStateChangeErc721ApprovalForAll'
                              - $ref: '#/components/schemas/EvmStateChangeErc1155Transfer'
                              - $ref: '#/components/schemas/EvmStateChangeErc1155ApprovalForAll'
                              discriminator:
                                propertyName: kind
                                mapping:
                                  ERC20_TRANSFER: '#/components/schemas/EvmStateChangeErc20Transfer'
                                  ERC20_APPROVAL: '#/components/schemas/EvmStateChangeErc20Approval'
                                  NATIVE_ASSET_TRANSFER: '#/components/schemas/EvmStateChangeNativeAssetTransfer'
                                  ERC721_TRANSFER: '#/components/schemas/EvmStateChangeErc721Transfer'
                                  ERC721_APPROVAL: '#/components/schemas/EvmStateChangeErc721Approval'
                                  ERC721_APPROVAL_FOR_ALL: '#/components/schemas/EvmStateChangeErc721ApprovalForAll'
                                  ERC1155_TRANSFER: '#/components/schemas/EvmStateChangeErc1155Transfer'
                                  ERC1155_APPROVAL_FOR_ALL: '#/components/schemas/EvmStateChangeErc1155ApprovalForAll'
                      error:
                        description: A nullable error object which includes the parsed simulation error encountered (if any)
                        oneOf:
                        - $ref: '#/components/schemas/EvmTransactionRevertedError'
                        - $ref: '#/components/schemas/EvmTransactionError'
                        - $ref: '#/components/schemas/EvmSimulationFailedError'
                        - $ref: '#/components/schemas/EvmUnknownError'
                        - type: 'null'
                        discriminator:
                          propertyName: kind
                          mapping:
                            TRANSACTION_REVERTED: '#/components/schemas/EvmTransactionRevertedError'
                            TRANSACTION_ERROR: '#/components/schemas/EvmTransactionError'
                            SIMULATION_FAILED: '#/components/schemas/EvmSimulationFailedError'
                            UNKNOWN_ERROR: '#/components/schemas/EvmUnknownError'
                      gas:
                        type: object
                        description: An object that contains nullable fields with information about the estimated gas consumption of the simulated transaction
                        properties:
                          gasLimit:
                            type: string
                            example: '46220'
                            description: A nullable field that if the simulation was successful contains the estimated upper limit of gas usage for this transaction. The gasLimit should be viewed as an upper bound of how much gas the transaction can use, not as an accurate estimate how much it will realistically consume when submitted on-chain.
                            nullable: true
              examples:
                erc20_swap:
                  summary: ERC20 Swap ETH for DAI
                  value:
                    action: NONE
                    simulationResults:
                      error: null
                      gas: {}
                      expectedStateChanges:
                      - humanReadableDiff: Receive 1530.81307 DAI
                        rawInfo:
                          data:
                            amount:
                              after: '557039306766411381864245'
                              before: '555508493698012633714742'
                            contract:
                              address: '0x6b175474e89094c44da98b954eedeac495271d0f'
                              kind: ACCOUNT
                            decimals: 18
                            name: Dai Stablecoin
                            symbol: DAI
                            asset:
                              address: '0x6b175474e89094c44da98b954eedeac495271d0f'
                              symbol: DAI
                              name: Dai Stablecoin
                              decimals: 18
                              verified: true
                              lists:
                              - COINGECKO
                              - ZERION
                              - ONE_INCH
                              - UNISWAP
                              - MY_CRYPTO_API
                              - KLEROS_TOKENS
                              imageUrl: https://d1ts37qlq4uz4s.cloudfront.net/evm__evm%3A%3Aethereum__evm%3A%3Aethereum%3A%3Amainnet__0x6b175474e89094c44da98b954eedeac495271d0f.png
                          kind: ERC20_TRANSFER
                      - humanReadableDiff: Send 1 ETH
                        rawInfo:
                          data:
                            amount:
                              after: '1182957389356504134754'
                              before: '1183957389356504134754'
                            contract:
                              address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'
                              kind: ACCOUNT
                            decimals: 18
                            name: Ether
                            symbol: ETH
                          kind: NATIVE_ASSET_TRANSFER
                    warnings: []
                erc20_approval:
                  summary: ERC20 Approval
                  value:
                    action: NONE
                    simulationResults:
                      error: null
                      gas: {}
                      expectedStateChanges:
                      - humanReadableDiff: Approve to transfer up to 1000 USDT
                        rawInfo:
                          data:
                            amount:
                              after: '1000000000'
                              before: '0'
                            asset:
                              address: '0xdac17f958d2ee523a2206206994597c13d831ec7'
                              name: Tether USD
                              decimals: 6
                              lists:
                              - COINGECKO
                              - ZERION
                              - ONE_INCH
                              - UNISWAP
                              - MY_CRYPTO_API
                              - KLEROS_TOKENS
                              symbol: USDT
                              verified: true
                              imageUrl: https://d1ts37qlq4uz4s.cloudfront.net/evm__evm%3A%3Aethereum__evm%3A%3Aethereum%3A%3Amainnet__0xdac17f958d2ee523a2206206994597c13d831ec7.png
                            contract:
                              address: '0xdac17f958d2ee523a2206206994597c13d831ec7'
                              kind: ACCOUNT
                            decimals: 6
                            name: Tether USD
                            owner:
                              address: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
                              kind: ACCOUNT
                            spender:
                              address: '0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45'
                              kind: ACCOUNT
                            symbol: USDT
                          kind: ERC20_APPROVAL
                      warnings: []
                erc721_buy:
                  summary: Buy an ERC721 NFT with ETH
                  value:
                    action: NONE
                    simulationResults:
                      error: null
                      gas: {}
                      expectedStateChanges:
                      - humanReadableDiff: 'Receive PudgyPenguins #7238'
                        rawInfo:
                          data:
                            amount:
                              after: '1'
                              before: '0'
                            contract:
                              address: '0xbd3531da5cf5857e7cfaa92426877b022e612cf8'
                              kind: ACCOUNT
                            metadata:
                              rawImageUrl: https://ipfs.io/ipfs/QmNf1UsmdGaMbpatQ6toXSkzDpizaGmC9zfunCyoz1enD5/penguin/7238.png
                            name: PudgyPenguins
                            symbol: PPG
                            tokenId: '7238'
                          kind: ERC721_TRANSFER
                      - humanReadableDiff: Send 3.181 ETH
                        rawInfo:
                          data:
                            amount:
                              after: '998426264937289938488'
                              before: '1001607264937289938488'
                            contract:
                              address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'
                              kind: ACCOUNT
                            decimals: 18
                            name: Ether
                            symbol: ETH
                          kind: NATIVE_ASSET_TRANSFER
                    warnings: []
                erc721_approve_for_all:
                  summary: ERC721 Approve For All
                  value:
                    action: WARN
                    simulationResults:
                      error: null
                      gas: {}
                      expectedStateChanges:
                      - humanReadableDiff: Approve to transfer all your BoredApeYachtClub
                        rawInfo:
                          data:
                            amount:
                              after: '115792089237316195423570985008687907853269984665640564039457584007913129639935'
                              before: '0'
                            contract:
                              address: '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d'
                              kind: ACCOUNT
                            name: BoredApeYachtClub
                            owner:
                              address: '0x38191ca1307ebf67ca1a7caf5346dbd91d882ca6'
                              kind: ACCOUNT
                            spender:
                              address: '0x1e0049783f008a0085193e00003d00cd54003c71'
                              kind: ACCOUNT
                            symbol: BAYC
                          kind: ERC721_APPROVAL_FOR_ALL
                      warnings:
                      - kind: UNLIMITED_ALLOWANCE_TO_NFTS
                        message: You are allowing this website to withdraw funds from your account in the future
                        severity: WARNING
                erc721_approve:
                  summary: ERC721 Approve
                  value:
                    action: NONE
                    simulationResults:
                      error: null
                      gas: {}
                      expectedStateChanges:
                      - humanReadableDiff: Approve to transfer BoredApeYachtClub
                        rawInfo:
                          data:
                            amount:
                              after: '1'
                              before: '0'
                            contract:
                              address: '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d'
                              kind: ACCOUNT
                            metadata:
                              rawImageUrl: ipfs://QmXFwVpxkRtfohxARE6f4gc5oRSVQ9iVU1fxzbj9AkJXx5
                            name: BoredApeYachtClub
                            owner:
                              address: '0xed2ab4948ba6a909a7751dec4f34f303eb8c7236'
                              kind: ACCOUNT
                            spender:
                              address: '0x1e0049783f008a0085193e00003d00cd54003c71'
                              kind: ACCOUNT
                            symbol: BAYC
                            tokenId: '6603'
                          kind: ERC721_APPROVAL
                      warnings: []
                erc1155_buy:
                  summary: Buy an ERC1155 token with ETH
                  value:
                    action: NONE
                    simulationResults:
                      error: null
                      gas: {}
                      expectedStateChanges:
                      - humanReadableDiff: Send 0.033 ETH
                        rawInfo:
                          data:
                            amount:
                              after: '71057321770366572'
                              before: '104057321770366572'
                            contract:
                              address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'
                              kind: ACCOUNT
                            decimals: 18
                            name: Ether
                            symbol: ETH
                          kind: NATIVE_ASSET_TRANSFER
                      - humanReadableDiff: Receive Corgi
                        rawInfo:
                          data:
                            amount:
                              after: '1'
                              before: '0'
                            contract:
                              address: '0x51e613727fdd2e0b91b51c3e5427e9440a7957e4'
                              kind: ACCOUNT
                            metadata:
                              rawImageUrl: https://img.cryptocorgis.co/corgi/13014975
                            tokenId: '13014975'
                          kind: ERC1155_TRANSFER
                    warnings: []
                erc1155_approve_for_all:
                  summary: ERC1155 approve for all
                  value:
                    action: WARN
                    simulationResults:
                      error: null
                      gas: {}
                      expectedStateChanges:
                      - humanReadableDiff: Approve to transfer all your Sandbox's ASSETs
                        rawInfo:
                          data:
                            amount:
                              after: '115792089237316195423570985008687907853269984665640564039457584007913129639935'
                              before: '0'
                            contract:
                              address: '0xa342f5d851e866e18ff98f351f2c6637f4478db5'
                              kind: ACCOUNT
                            owner:
                              address: '0xed2ab4948ba6a909a7751dec4f34f303eb8c7236'
                              kind: ACCOUNT
                            spender:
                              address: '0x00000000006c3852cbef3e08e8df289169ede581'
                              kind: ACCOUNT
                          kind: ERC1155_APPROVAL_FOR_ALL
                      - warnings:
                        - kind: UNLIMITED_ALLOWANCE_TO_NFTS
                          message: You are allowing this website to withdraw funds from your account in the future
                          severity: WARNING
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
  /solana/v0/mainnet/scan/transactions:
    post:
      tags:
      - Scan transaction
      summary: Solana
      operationId: scan-transactions-solana
      description: 'Scan Solana transactions in order to receive recommended actions, tailored warnings and human-readable simulation results explaining what the transaction will do. The API will return a list of warnings and a list of human-readable simulation results.

        ### Supported networks

        | Network | Base URL |

        | --- | --- |

        | Mainnet | https://api.blowfish.xyz/solana/v0/mainnet/scan/transactions |

        | Testnet | https://api.blowfish.xyz/solana/v0/testnet/scan/transactions |

        | Devnet | https://api.blowfish.xyz/solana/v0/devnet/scan/transactions |

        Note: If you are using a free, self-service API key from our Developer Portal, be sure to add the `free` subdomain (e.g., `https://free.api.blowfish.xyz`) to the above endpoints.

        '
      security:
      - ApiKeyAuth: []
      parameters:
      - name: language
        in: query
        description: The language to use in the returned human-readable warnings and simulation results
        schema:
          $ref: '#/components/schemas/Languages'
      - name: X-Api-Key
        in: header
        description: API Key
        required: true
        schema:
          $ref: '#/components/schemas/ApiKeyHeader'
      - name: X-Api-Version
        in: header
        description: Which version of the API to use
        schema:
          $ref: '#/components/schemas/ApiVersionHeader'
      - name: Content-Type
        in: header
        description: The expected return content type
        schema:
          $ref: '#/components/schemas/ContentType'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                transactions:
                  type: array
                  items:
                    type: string
                    example: GfoPPvWL5eSJssAoemjqUpE9nMVt5kWTNznPz1F1CKi5kcBY8tDBgLzpbdBnTQjHJgyutdXEHmkkmE3iM3y94LE5s3zZ8wq2sjMkgjpddAnTwY1TrGSk6yZNykT2Un1PKqwo2XMXBa5FR3BpKStBV4krbiFzT9UySLSysTBzw31caBCuvcsetdE7yYWXGXEGbRiCf3BCWFkrooKAHrzW7bSHmGdUuB2sip9wEcb7r3SjhzkkAK2tySVkrbvVB5c11oF6zDYVys7wpaGbjn2DsVPYo9gbGVQXHi4qgCBXTzCT8v8pZV9gh4FeMRWw5yzfuWtxw44aQ6EKz55cTUhBAVMUCEZQUrfJbx1NzEYod41n7GFHzEXTZyPCo5CnGmX8u2UhuLhx2n8ZNg6Mj1dH6PGRQnKtxAzwicfPJ9KahGjoNLNcki9gfdxURy56DY3YH3DDviLrKKjiEoTmZs8UiaSBwRjsLA5dhJ6G6LyC9bjertH1cpcDWSQhRfwBXHAvHNirLX8927WcCHoTAUWXKqB34YJu4cLPwTn5kUr4FMQgQBhvyaMDDzrH76bwSFS4oRmMqXtscyWXbdXJC1k8iiRHftqmZhg3bP3UydcXKBUQJi15A64kjpkGY7ChxdcuwgLzKnVNJGG897nUPsVmsVfZNwiVqVZ6QKv1z7yv4EGvbkhWStx9NFvv8JkHjUhL4vNo8o7TPNib21WeFLgmiAu7nrn25kkJLZ3XE6ZVceUEbywJCMdwMomPx2maxauRehuxSorkE3ngcj7mC88HEgPTBQiP2JRJxcFvQp1CsfErCs3F3uG79kEKJLzNoFbCL58s6JsH3rE69wcb5e47JztFmrmGp4p3mb2jYoUfj6AfCctky9MnB6jWTdyg2o7zUcr5f35Qwahgcsce95RgH9mcWKFLqu49RxpFUgnHiNaDG67YEGdDgu2YABYxv6tv7PEtCJqZH4VVbpu9TRQCCXkQv4Xj7j6ALmhbNoJBEHJHqTGhiNQvV5aibesnGG62epoPz36uNJZrt6GV53AeLig22HVtBRr1NE2wB6h9Ax6VX7KKrekKBMzUxeAjWbGERkCWuXdRjTrpDG3bbDCDgep8k9ZnDDQtNqSKJbbxZ1VJvMKgcgty5P4n4YTXTSFNQ9kE8VCikb9tpN6iRnUwD9GFRQfiR76QNZs5hU2hn8asGYFnRcEgjZV9cSwC6foKrV47uq9X2dPWZg56TpNhPb85fzbkN13LdFHcua3MTvWmSD4LZAFMF8QWqpb7b2YZZpc1sQvYc5gN856JwehDybMsB2EFepiBFQXTxwB2c9xbHjEf3RcWwe3LZiD8vvWLfGF2t7PzwDKbEREpsX8piN76GkCGiRjgkdehiXaLzjQ5nW3Fi8F2HjALRRjHJxfNQq4vH4B6Nwp7rruzqdY1j6cm3QagrgeXCmfSmRV6kaCMRRQYbVW6Ju4rMbLTWa7FAWCmR2rvmevmi1PmV8zhApVFbV9VHd2hTazrddBWXRAmTRBZEjyRqSkr3y45ecph1ae87Pi3quaEEhjFP9oSWTUs3ufHCW2XjLj
                  description: Base58 or Base64 encoded Solana transactions to scan
                userAccount:
                  type: string
                  example: 5ufzDEwP2jKrvx78inuWNPrXRmR9AcXySqc2B3CRqR3G
                  description: Base58-encoded account of signer of transactions
                metadata:
                  $ref: '#/components/schemas/RequestMetadata'
              required:
              - transactions
              - userAccount
              - metadata
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  action:
                    $ref: '#/components/schemas/ActionEnum'
                  warnings:
                    $ref: '#/components/schemas/Warning'
                  simulationResults:
                    type: object
                    properties:
                      isRecentBlockhashExpired:
                        type: boolean
                        example: false
                        description: Whether all of the transaction's recentBlockhashes have expired
                      expectedStateChanges:
                        type: array
                        description: An array of state changes one could expect if these transactions were submitted on-chain. Each state change represents a meaningful change to the end-user's assets or permissions on-chain. We reserve the right to add new state change types, so any handling logic custom to state change types should fallback gracefully to showing the end-user the `humanReadableDiff` of any unrecognized state change types.
                        items:
                          type: object
                          properties:
                            humanReadableDiff:
                              type: string
                              description: Computed explanation of the state change that can be directly presented to the end-user. While the API is still in development, we suggest integrators expose this in their signing UI since the list of state change kinds has not yet stabilized.
                              example: Receive 0.05657 SOL
                            suggestedColor:
                              type: string
                              description: Suggested text color when presenting the diff to end-users
                              enum:
                              - CREDIT
                              - DEBIT
                              example: CREDIT
                            rawInfo:
                              description: A machine-parsable state change object describing the state change.
                              oneOf:
                              - $ref: '#/components/schemas/SolanaStateChangeSolTransfer'
                              - $ref: '#/components/schemas/SolanaStageChangeSplTransfer'
                              - $ref: '#/components/schemas/SolanaStateChangeSplApproval'
                              - $ref: '#/components/schemas/SolanaStateChangeSolStakeAuthorityChange'
                              discriminator:
                                propertyName: kind
                                mapping:
                                  SOL_TRANSFER: '#/components/schemas/SolanaStateChangeSolTransfer'
                                  SPL_TRANSFER: '#/components/schemas/SolanaStageChangeSplTransfer'
                                  SPL_APPROVAL: '#/components/schemas/SolanaStateChangeSplApproval'
                                  SOL_STAKE_AUTHORITY_CHANGE: '#/components/schemas/SolanaStateChangeSolStakeAuthorityChange'
                      error:
                        type: object
                        properties:
                          kind:
                            type: string
                            description: A unique representation of the error kind. Currently maps to the screaming case of the SystemError enum values, TokenError and TransactionError enum values.
                            example: INSUFFICIENT_FUNDS
                            enum:
                            - AN_ACCOUNT_WITH_THE_SAME_ADDRESS_ALREADY_EXISTS
                            - ACCOUNT_DOES_NOT_HAVE_ENOUGH_SOL_TO_PERFORM_THE_OPERATION
                            - CANNOT_ASSIGN_ACCOUNT_TO_THIS_PROGRAM_ID
                            - CANNOT_ALLOCATE_ACCOUNT_DATA_OF_THIS_LENGTH
                            - LENGTH_OF_REQUESTED_SEED_IS_TOO_LONG
                            - PROVIDED_ADDRESS_DOES_NOT_MATCH_ADDRESSED_DERIVED_FROM_SEED
                            - ADVANCING_STORED_NONCE_REQUIRES_A_POPULATED_RECENTBLOCKHASHES_SYSVAR
                            - STORED_NONCE_IS_STILL_IN_RECENT_BLOCKHASHES
                            - SPECIFIED_NONCE_DOES_NOT_MATCH_STORED_NONCE
                            - LAMPORT_BALANCE_BELOW_RENT-EXEMPT_THRESHOLD
                            - INSUFFICIENT_FUNDS
                            - INVALID_MINT
                            - ACCOUNT_NOT_ASSOCIATED_WITH_THIS_MINT
                            - OWNER_DOES_NOT_MATCH
                            - FIXED_SUPPLY
                            - ALREADY_IN_USE
                            - INVALID_NUMBER_OF_PROVIDED_SIGNERS
                            - INVALID_NUMBER_OF_REQUIRED_SIGNERS
                            - STATE_IS_UNINITIALIZED
                            - INSTRUCTION_DOES_NOT_SUPPORT_NATIVE_TOKENS
                            - NON-NATIVE_ACCOUNT_CAN_ONLY_BE_CLOSED_IF_ITS_BALANCE_IS_ZERO
                            - INVALID_INSTRUCTION
                            - STATE_IS_INVALID_FOR_REQUESTED_OPERATION
                            - OPERATION_OVERFLOWED
                            - ACCOUNT_DOES_NOT_SUPPORT_SPECIFIED_AUTHORITY_TYPE
                            - THIS_TOKEN_MINT_CANNOT_FREEZE_ACCOUNTS
                            - ACCOUNT_IS_FROZEN
                            - THE_PROVIDED_DECIMALS_VALUE_DIFFERENT_FROM_THE_MINT_DECIMALS
                            - INSTRUCTION_DOES_NOT_SUPPORT_NON-NATIVE_TOKENS
                            - ACCOUNT_IN_USE
                            - ACCOUNT_LOADED_TWICE
                            - ATTEMPT_TO_DEBIT_AN_ACCOUNT_BUT_FOUND_NO_RECORD_OF_A_PRIOR_CREDIT.
                            - ATTEMPT_TO_LOAD_A_PROGRAM_THAT_DOES_NOT_EXIST
                            - INSUFFICIENT_FUNDS_FOR_FEE
                            - THIS_ACCOUNT_MAY_NOT_BE_USED_TO_PAY_TRANSACTION_FEES
                            - THIS_TRANSACTION_HAS_ALREADY_BEEN_PROCESSED
                            - BLOCKHASH_NOT_FOUND
                            - ERROR_PROCESSING_INSTRUCTION_{0}:_{1}
                            - LOADER_CALL_CHAIN_IS_TOO_DEEP
                            - TRANSACTION_REQUIRES_A_FEE_BUT_HAS_NO_SIGNATURE_PRESENT
                            - TRANSACTION_CONTAINS_AN_INVALID_ACCOUNT_REFERENCE
                            - TRANSACTION_DID_NOT_PASS_SIGNATURE_VERIFICATION
                            - THIS_PROGRAM_MAY_NOT_BE_USED_FOR_EXECUTING_INSTRUCTIONS
                            - TRANSACTION_FAILED_TO_SANITIZE_ACCOUNTS_OFFSETS_CORRECTLY
                            - TRANSACTIONS_ARE_CURRENTLY_DISABLED_DUE_TO_CLUSTER_MAINTENANCE
                            - TRANSACTION_PROCESSING_LEFT_AN_ACCOUNT_WITH_AN_OUTSTANDING_BORROWED_REFERENCE
                            - TRANSACTION_WOULD_EXCEED_MAX_BLOCK_COST_LIMIT
                            - TRANSACTION_VERSION_IS_UNSUPPORTED
                            - TRANSACTION_LOADS_A_WRITABLE_ACCOUNT_THAT_CANNO

# --- truncated at 32 KB (68 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/blowfish/refs/heads/main/openapi/blowfish-scan-transaction-api-openapi.yml