Blowfish Scan message API

Endpoints related to scanning blockchain messages

OpenAPI Specification

blowfish-scan-message-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: API reference Download blocklist Scan message 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 message
  description: Endpoints related to scanning blockchain messages
paths:
  /ethereum/v0/mainnet/scan/message:
    post:
      tags:
      - Scan message
      summary: EVM
      operationId: scan-message-evm
      description: 'Scan an EVM message in order to receive recommended actions, tailored warnings and human-readable simulation results explaining what signing the message will do.

        ### Supported networks

        | Network | Base URL |

        | --- | --- |

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

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

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

        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:
                message:
                  description: An object containing the message type and contents
                  oneOf:
                  - $ref: '#/components/schemas/EvmSignTypedData'
                  - $ref: '#/components/schemas/EvmSignMessage'
                  discriminator:
                    propertyName: kind
                    mapping:
                      SIGN_TYPED_DATA: '#/components/schemas/EvmSignTypedData'
                      SIGN_MESSAGE: '#/components/schemas/EvmSignMessage'
                metadata:
                  $ref: '#/components/schemas/RequestMetadata'
                userAccount:
                  $ref: '#/components/schemas/EvmUserAccount'
              required:
              - message
              - metadata
              - userAccount
            examples:
              usdc_permit2:
                summary: Example request for USDC Permit2 SignatureTransfer with witness and unlimited expiry
                value:
                  message:
                    kind: SIGN_TYPED_DATA
                    data:
                      domain:
                        name: Permit2
                        chainId: '1'
                        verifyingContract: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
                      types:
                        PermitWitnessTransferFrom:
                        - name: permitted
                          type: TokenPermissions
                        - name: spender
                          type: address
                        - name: nonce
                          type: uint256
                        - name: deadline
                          type: uint256
                        - name: witness
                          type: MockWitness
                        TokenPermissions:
                        - name: token
                          type: address
                        - name: amount
                          type: uint256
                        MockWitness:
                        - name: mock
                          type: uint256
                      primaryType: PermitWitnessTransferFrom
                      message:
                        permitted:
                          token: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
                          amount: '13675000000'
                        spender: '0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45'
                        nonce: '0'
                        deadline: '281474976710655'
                        witness:
                          mock: '0x0000000000000000000000000000000000000000000000000000000000000000'
                  userAccount: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
                  metadata:
                    origin: https://exampledapp.com
              usdc_permit:
                summary: Example request for USDC Permit (approval) with unlimited expiry
                value:
                  message:
                    kind: SIGN_TYPED_DATA
                    data:
                      types:
                        EIP712Domain:
                        - name: name
                          type: string
                        - name: version
                          type: string
                        - name: chainId
                          type: uint256
                        - name: verifyingContract
                          type: address
                        Permit:
                        - name: owner
                          type: address
                        - name: spender
                          type: address
                        - name: value
                          type: uint256
                        - name: nonce
                          type: uint256
                        - name: deadline
                          type: uint256
                      domain:
                        name: USD Coin
                        version: '2'
                        verifyingContract: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
                        chainId: '1'
                      primaryType: Permit
                      message:
                        owner: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
                        spender: '0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45'
                        value: '123000000000'
                        nonce: '7'
                        deadline: '115792089237316195423570985008687907853269984665640564039457584007913129639935'
                  userAccount: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
                  metadata:
                    origin: https://exampledapp.com
              seaport_order:
                summary: Opensea Seaport Order Request
                value:
                  metadata:
                    origin: https://opensea.io
                  userAccount: '0xed2ab4948ba6a909a7751dec4f34f303eb8c7236'
                  message:
                    kind: SIGN_TYPED_DATA
                    data:
                      types:
                        EIP712Domain:
                        - name: name
                          type: string
                        - name: version
                          type: string
                        - name: chainId
                          type: uint256
                        - name: verifyingContract
                          type: address
                        OrderComponents:
                        - name: offerer
                          type: address
                        - name: zone
                          type: address
                        - name: offer
                          type: OfferItem[]
                        - name: consideration
                          type: ConsiderationItem[]
                        - name: orderType
                          type: uint8
                        - name: startTime
                          type: uint256
                        - name: endTime
                          type: uint256
                        - name: zoneHash
                          type: bytes32
                        - name: salt
                          type: uint256
                        - name: conduitKey
                          type: bytes32
                        - name: counter
                          type: uint256
                        OfferItem:
                        - name: itemType
                          type: uint8
                        - name: token
                          type: address
                        - name: identifierOrCriteria
                          type: uint256
                        - name: startAmount
                          type: uint256
                        - name: endAmount
                          type: uint256
                        ConsiderationItem:
                        - name: itemType
                          type: uint8
                        - name: token
                          type: address
                        - name: identifierOrCriteria
                          type: uint256
                        - name: startAmount
                          type: uint256
                        - name: endAmount
                          type: uint256
                        - name: recipient
                          type: address
                      primaryType: OrderComponents
                      domain:
                        name: Seaport
                        version: '1.1'
                        chainId: '1'
                        verifyingContract: '0x00000000006c3852cbEf3e08E8dF289169EdE581'
                      message:
                        offerer: '0xed2ab4948bA6A909a7751DEc4F34f303eB8c7236'
                        offer:
                        - itemType: '2'
                          token: '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D'
                          identifierOrCriteria: '1726'
                          startAmount: '1'
                          endAmount: '1'
                        consideration:
                        - itemType: '0'
                          token: '0x0000000000000000000000000000000000000000'
                          identifierOrCriteria: '0'
                          startAmount: '94050000000000000000'
                          endAmount: '94050000000000000000'
                          recipient: '0xed2ab4948bA6A909a7751DEc4F34f303eB8c7236'
                        - itemType: '0'
                          token: '0x0000000000000000000000000000000000000000'
                          identifierOrCriteria: '0'
                          startAmount: '2475000000000000000'
                          endAmount: '2475000000000000000'
                          recipient: '0x0000a26b00c1F0DF003000390027140000fAa719'
                        - itemType: '0'
                          token: '0x0000000000000000000000000000000000000000'
                          identifierOrCriteria: '0'
                          startAmount: '2475000000000000000'
                          endAmount: '2475000000000000000'
                          recipient: '0xA858DDc0445d8131daC4d1DE01f834ffcbA52Ef1'
                        startTime: '1664436437'
                        endTime: '1667028437'
                        orderType: '2'
                        zone: '0x004C00500000aD104D7DBd00e3ae0A5C00560C00'
                        zoneHash: '0x0000000000000000000000000000000000000000000000000000000000000000'
                        salt: '24446860302761739304752683030156737591518664810215442929818054330004503495628'
                        conduitKey: '0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000'
                        totalOriginalConsiderationItems: '3'
                        counter: '53'
      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
                    description: 'A nullable object. Message simulation requires in-depth understanding of the contract verifying the message and is not a generalizable solution that works for any message. If we do not support simulating a particular message the simulationResults property will be returned as null and the recommended action is to fallback to showing the raw message data to the user before they sign

                      Currently supported messages: OpenSea Seaport orders & ERC20 Permit approvals

                      '
                    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/EvmStateChangeErc20Permit'
                              - $ref: '#/components/schemas/EvmStateChangeErc20Transfer'
                              - $ref: '#/components/schemas/EvmStateChangeNativeAssetTransfer'
                              - $ref: '#/components/schemas/EvmStateChangeErc721Transfer'
                              - $ref: '#/components/schemas/EvmStateChangeErc1155Transfer'
                              discriminator:
                                propertyName: kind
                                mapping:
                                  ERC20_PERMIT: '#/components/schemas/EvmStateChangeErc20Permit'
                                  ERC20_TRANSFER: '#/components/schemas/EvmStateChangeErc20Transfer'
                                  NATIVE_ASSET_TRANSFER: '#/components/schemas/EvmStateChangeNativeAssetTransfer'
                                  ERC721_TRANSFER: '#/components/schemas/EvmStateChangeErc721Transfer'
                                  ERC1155_TRANSFER: '#/components/schemas/EvmStateChangeErc1155Transfer'
                      error:
                        description: A nullable error object which includes the parsed simulation error encountered (if any)
                        nullable: true
                        type: object
                        properties:
                          kind:
                            type: string
                            description: 'A unique representation of the error kind


                              UNSUPPORTED_ORDER_TYPE: Opensea order simulation currently supports basic order types for swapping ERC20/721/1155 <-> ERC20/721/1155, advanced order types using attribute criteria are not supported. If the message is a valid OpenSea order but of a type not supported UNSUPPORTED_ORDER_TYPE will be returned


                              UNKNOWN_ERROR: We were not able to simulate the state changes of the message for an unknown reason, however the transaction it self did not revert so the user can proceed with caution

                              '
                            example: UNSUPPORTED_ORDER_TYPE
                            enum:
                            - UNSUPPORTED_ORDER_TYPE
                            - UNKNOWN_ERROR
                          humanReadableError:
                            type: string
                            description: Human readable & translated string that can be directly exposed to end-users
                            example: Unsupported order type, unable to simulate message
              examples:
                erc20_permit:
                  summary: ERC20 Permit
                  value:
                    action: NONE
                    warnings: []
                    simulationResults:
                      expectedStateChanges:
                      - humanReadableDiff: Permit to transfer up to 123 USDC within an hour
                        rawInfo:
                          kind: ERC20_PERMIT
                          data:
                            contract:
                              kind: ACCOUNT
                              address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
                            name: USD Coin
                            symbol: USDC
                            decimals: 6
                            owner:
                              kind: ACCOUNT
                              address: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
                            spender:
                              kind: ACCOUNT
                              address: '0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45'
                            amount: '123000000'
                            nonce: '2'
                            deadline: 1667799719
                            asset:
                              address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
                              symbol: USDC
                              name: USD Coin
                              decimals: 6
                              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__0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.png
                      error: null
                seaport_order:
                  summary: Opensea Seaport Order Selling NFT for ETH
                  value:
                    action: NONE
                    simulationResults:
                      error: null
                      expectedStateChanges:
                      - humanReadableDiff: Receive 94.05 ETH
                        rawInfo:
                          data:
                            amount:
                              after: '157873734139299463313'
                              before: '63823734139299463313'
                            contract:
                              address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'
                              kind: ACCOUNT
                            decimals: 18
                            name: Ether
                            symbol: ETH
                          kind: NATIVE_ASSET_TRANSFER
                      - humanReadableDiff: Send BoredApeYachtClub
                        rawInfo:
                          data:
                            amount:
                              after: '52'
                              before: '53'
                            contract:
                              address: '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d'
                              kind: ACCOUNT
                            metadata:
                              rawImageUrl: ipfs://QmYqXQb3xFNWDkNno34GNL435yMbjt4B8b89LvBA75A9VP
                            name: BoredApeYachtClub
                            symbol: BAYC
                            tokenId: '1726'
                          kind: ERC721_TRANSFER
                    warnings: []
                unlimited_permit:
                  summary: Unlimit amount permit message
                  value:
                    action: WARN
                    simulationResults:
                      error: null
                      expectedStateChanges:
                      - humanReadableDiff: Permit to transfer all your UNI within 2 days
                        rawInfo:
                          data:
                            amount: '115792089237316195423570985008687907853269984665640564039457584007913129639935'
                            asset:
                              address: '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'
                              decimals: 18
                              imageUrl: https://d1ts37qlq4uz4s.cloudfront.net/evm__evm%3A%3Aethereum__evm%3A%3Aethereum%3A%3Amainnet__0x1f9840a85d5af5bf1d1762f925bdaddc4201f984.png
                              lists:
                              - COINGECKO
                              - ZERION
                              - ONE_INCH
                              - UNISWAP
                              - MY_CRYPTO_API
                              - KLEROS_TOKENS
                              name: Uniswap
                              symbol: UNI
                              verified: true
                            contract:
                              address: '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'
                              kind: ACCOUNT
                            deadline: 1667556263
                            decimals: 18
                            name: Uniswap
                            nonce: '0'
                            owner:
                              address: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
                              kind: ACCOUNT
                            spender:
                              address: '0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45'
                              kind: ACCOUNT
                            symbol: UNI
                          kind: ERC20_PERMIT
                      warnings:
                      - kind: PERMIT_UNLIMITED_ALLOWANCE
                        message: You are allowing this dApp to withdraw funds from your account in the future
                        severity: WARNING
                    warnings: []
        '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'
components:
  schemas:
    EvmStateChangeErc721Transfer:
      type: object
      description: ERC721 NFT transfers
      properties:
        kind:
          type: string
          description: What kind of state change this object is
          enum:
          - ERC721_TRANSFER
          example: ERC721_TRANSFER
        data:
          type: object
          properties:
            amount:
              $ref: '#/components/schemas/EvmAmount'
            contract:
              $ref: '#/components/schemas/EvmAddressInfo'
            metadata:
              $ref: '#/components/schemas/EvmNftMetadata'
            name:
              $ref: '#/components/schemas/EvmName'
            symbol:
              $ref: '#/components/schemas/EvmSymbol'
            tokenId:
              $ref: '#/components/schemas/EvmErc721TokenId'
            assetPrice:
              description: The NFT collection's $-value floor price
              $ref: '#/components/schemas/LegacyAssetPrice'
          description: Data associated with the state change
    EvmStateChangeErc1155Transfer:
      type: object
      description: ERC1155 transfers
      properties:
        kind:
          type: string
          description: What kind of state change this object is
          enum:
          - ERC1155_TRANSFER
          example: ERC1155_TRANSFER
        data:
          type: object
          properties:
            amount:
              $ref: '#/components/schemas/EvmAmount'
            contract:
              $ref: '#/components/schemas/EvmAddressInfo'
            metadata:
              $ref: '#/components/schemas/EvmNftMetadata'
            tokenId:
              $ref: '#/components/schemas/EvmErc1155TokenId'
            assetPrice:
              description: The NFT collection's $-value floor price
              $ref: '#/components/schemas/LegacyAssetPrice'
          description: Data associated with the state change
    Warning:
      type: array
      description: An array of warnings generated from scanning the transactions. All these warnings won't be returned in a single response (some are mutually exclusive) but it is advisable that your UI can display multiple warnings. Warnings are returned sorted by severity, so if you can only show a user one warning, show them the one at the 0th index.
      items:
        type: object
        properties:
          severity:
            type: string
            description: warning severity level. We suggest a yellow message if "WARNING", and a red message if "CRITICAL".
            enum:
            - CRITICAL
            - WARNING
            example: WARNING
          kind:
            type: string
            description: Warning kind. Can be used to override specific warnings with your own custom versions. We reserve the right to add new warnings as the need arises, so your UI should likewise defer to the supplied message if the kind isn't recognized by your code.
            enum:
            - SUSPECTED_MALICIOUS
            - KNOWN_MALICIOUS
            - TRANSFERRING_ERC20_TO_OWN_CONTRACT
            - UNLIMITED_ALLOWANCE_TO_NFTS
            - BULK_APPROVALS_REQUEST
            - SET_OWNER_AUTHORITY
            - TRUSTED_BLOCKLIST_DOMAIN
            - SEMI_TRUSTED_BLOCKLIST_DOMAIN
            - DANGLING_APPROVAL
            - TRADE_FOR_NOTHING
            - PERMIT_UNLIMITED_ALLOWANCE
            - PERMIT_NO_EXPIRATION
            - ETH_SIGN_TX_HASH
            - OBFUSCATED_CODE
            - DEVTOOLS_DISABLED
            - BLOCKLISTED_DOMAIN_CROSS_ORIGIN
            - WHITELISTED_DOMAIN_CROSS_ORIGIN
            - TOO_MANY_TRANSACTIONS
            - NON_ASCII_URL
            - COMPROMISED_AUTHORITY_UPGRADE
            - POISONED_ADDRESS
            - APPROVAL_TO_E_O_A
            - COPY_CAT_DOMAIN
            example: SUSPECTED_MALICIOUS
          message:
            type: string
            description: human-readable message to present to the end-user
            example: 'Domain found on blocklists maintained by/: Blowfish. This website is very likely to be a scam.'
    ApiKeyHeader:
      description: API key
      type: string
      default: 4daa1e3b-87e6-40b2-8883-758feb6a8e46
      example: e79e18b4-8ffa-4fab-9e2e-f24057644f93
    EvmSymbol:
      type: string
      example: USDT
    EvmErc721TokenId:
      type: string
      nullable: true
      example: '100'
      description: The ID of the ERC721 token. It can temporarily be null in some edge cases where we are unable to parse it
    InternalServerError:
      type: object
      properties:
        error:
          type: string
          enum:
          - Internal Server Error
          example: Internal Server Error
    EvmSignMessage:
      type: object
      properties:
        kind:
          type: string
          enum:
          - SIGN_MESSAGE
          example: SIGN_MESSAGE
        rawMessage:
          type: string
          example: '0x40ac14ef28d35fb4540e0cd0950123b378224d3585ec887c26f7a510da544552'
          description: The hex encoded eth_sign message that the dapp is proposing the user to sign.
      required:
      - kind
      - rawMessage
    ContentType:
      description: Expected response content type
      type: string
      default: application/json
      example: application/json
    Languages:
      type: string
      default: en
      example: en
      description: Specify the desired language for the returned warning messages and human-readable simulation results. If unknown, defaults to English.
      enum:
      - am
      - ar
      - ar-SA
      - ar-EG
      - ar-DZ
      - ar-MA
      - ar-IQ
      - ar-JO
      - ar-KW
      - ar-LB
      - ar-LY
      - ar-OM
      - ar-QA
      - ar-SY
      - ar-TN
      - ar-AE
      - ar-YE
      - bn
      - fr
      - fr-BE
      - fr-CA
      - fr-FR
      - fr-LU
      - fr-CH
      - de
      - de-AT
      - de-DE
      - de-LI
      - de-LU
      - de-CH
      - en
      - en-US
      - en-GB
      - en-CA
      - en-AU
      - en-NZ
      - en-ZA
      - en-IE
      - en-IN
      - en-SG
      - en-JM
      - en-BZ
      - en-TT
      - en-PH
      - it
      - it-IT
      - it-CH
      - ms
      - ms-BN
      - ms-MY
      - pt
      - pt-BR
      - pt-PT
      - ru
      - ru-RU
      - es
      - es-AR
      - es-BO
      - es-CL
      - es-CO
      - es-CR
      - es-CU
      - es-DO
      - es-EC
      - es-SV
      - es-GQ
      - es-GT
      - es-HN
      - es-MX
      - es-NI
      - es-PA
      - es-PY
      - es-PE
      - es-PH
      - es-PR
      - es-ES
      - es-US
      - es-UY
      - es-VE
      - sw
      - tr
      - tr-TR
      - fil
      - gu_IN
      - ha
      - hi
      - id
      - ig
      - ja
      - ko
      - my
      - pa
      - ta
      - th
      - vi
      - yo
      - zh_CN
      - zh_TW
    EvmErc1155TokenId:
      type: string
      nullable: true
      example: '100'
      description: The ID of the ERC1155 token
    Unauthorized:
      type: object
      properties:
        error:
          type: string
          description: The error that caused the 401
          example: 'Unauthorized: invalid X-API-KEY header value'
    EvmNftMetadata:
      type: object
      properties:
        rawImageUrl:
          type: string
          format: uri
          example: https://d1ts37qlq4uz4s.cloudfront.net/evm__evm%3A%3Aethereum__evm%3A%3Aethereum%3A%3Amainnet__0x6b175474e89094c44da98b954eedeac495271d0f.png
      description: Metadata associated with the NFT
    EvmStateChangeErc20Permit:
      type: object
      description: ERC20 token permit message
      properties:
        kind:
          type: string
          description: What kind of state change this object is
          enum:
          - ERC20_PERMIT
          example: ERC20_PERMIT
        data:
          type: object
          properties:
            contract:
              $ref: '#/components/schemas/EvmAddressInfo'
            owner:
              description: The owner of the ERC20 tokens
              $ref: '#/components/schemas/EvmAddressInfo'
            spender:
              description: The entity that will be allowed to spend them if the permit is granted
              $ref: '#/components/schemas/EvmAddressInfo'
            amount:
              type: string
              description: Stringified base unit amount of the token
              example: '115792089237316195423570985008687907853269984665640564039457584007913129639935'
            nonce:
              type: string
              description: Stringified nonce number
              example: '0'
            deadline:
              type: number
              description: Unix timestamp when this permit will expire
              example: 1667556263
            asset:
              $ref: '#/components/schemas/EvmAsset'
          description: Data associated with the state change
    LegacyAssetPrice:
      type: object
      properties:
        source:
          type: string
          enum:
          - Simplehash
          - Defillama
          - Coingecko
          example: Coingecko
        last_updated_at:
          type: number
          example: 1679331222
        dollar_value_per_token:
          type: number
          format: float
          example: 0.2784
    EvmUserAccount:
      type: string
      description: A hex-representation of the user account who is being asked to sign the supplied trans

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