Attachment
Keywords: net.corda.core.contracts.Attachment interface
Date: 2023-09-18

net.corda.core.contracts

## Interface Attachment

- All Superinterfaces:
    NamedByHash
  All Known Implementing Classes:
    ContractAttachment

      @DoNotImplement
      public Attachment
      extends NamedByHash

  An attachment is a ZIP (or an optionally signed JAR) that contains one or more files. Attachments are meant to contain public static data which can be referenced from transactions and utilised from contracts. Good examples of how attachments are meant to be used include:

  - Calendar data

  - Fixes (e.g. LIBOR)

  - Smart contract code

  - Legal documents

  - Facts generated by oracles which might be reused a lot.

  At the moment, non-ZIP attachments are not supported. Support may come in a future release. Using ZIP files for attachments makes it easy to ensure data on the ledger is compressed, which is useful considering that attachments may be widely replicated around the network. It also allows the jarsigner tool to be used to sign an attachment using ordinary certificates of the kind that many organisations already have, and improves the efficiency of attachment resolution in cases where the attachment is logically made up of many small files - e.g. is bytecode. Finally, using ZIPs ensures files have a timestamp associated with them, and enables informational attachments to be password protected (although in current releases password protected ZIPs are likely to fail to work).

- - ### Constructor Detail

    - #### Attachment

          public Attachment()

  - ### Method Detail

    - #### open

          @NotNull
          java.io.InputStream open()

    - #### openAsJAR

          @NotNull
          java.util.jar.JarInputStream openAsJAR()

    - #### extractFile

          void extractFile(@NotNull
                           java.lang.String path,
                           @NotNull
                           java.io.OutputStream outputTo)

      Finds the named file case insensitively and copies it to the output stream.

      Throws:
        `FileNotFoundException` - if the given path doesn't exist in the attachment.

    - #### getSigners

          @NotNull
          java.util.List<net.corda.core.identity.Party> getSigners()

      Deprecated.

      The parties that have correctly signed the whole attachment. Even though this returns a list of party objects, it is not required that these parties exist on the network, but rather they are a mapping from the signing key to the X.500 name.

      Note: Anyone can sign attachments, not only Corda parties. It's recommended to use `signerKeys`.

      See Also:
        `signerKeys`

    - #### getSignerKeys

          @NotNull
          java.util.List<java.security.PublicKey> getSignerKeys()

      The keys that have correctly signed the whole attachment. Can be empty, for example non-contract attachments won't be necessarily be signed.

    - #### getSize

          int getSize()

      Attachment size in bytes.