# Contract package

The `ContractPackage` entity provides a normalized representation of the Casper Network [Contract Package](https://docs.casper.network/developers/json-rpc/types_chain/#contractpackge). It includes the contract package's metadata based on Contract's type and named keys values and the latest version of the contract type within the package.

## Properties

The `ContractPackage` entity has the following properties:

| Property                          | Type                      | Description                                                                                                                   |
| --------------------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `contract_package_hash`           | `string(64)`              | Contract package hash represented as a hexadecimal string. Unique contract package identifier                                 |
| `owner_public_key`                | `string(68)`              | Public key of the owner of the contract package. Represented as a hexadecimal string                                          |
| `name`                            | `string`                  | Name of the contract package.                                                                                                 |
| `description`                     | `string`                  | Description of the contract package.                                                                                          |
| `metadata`                        | `ContractPackageMetadata` | Metadata associated with the contract package. Details described in the next table.                                           |
| `latest_version_contract_type_id` | `uint8`                   | [Contract type](https://docs.cspr.cloud/1.5.x/rest-api/contract/get-contract-types) identifier of the latest contract version |
| `timestamp`                       | `datetime`                | Timestamp indicating when the contract package was created.                                                                   |
| `icon_url`                        | `string`                  | URL pointing to an icon representing the contract package.                                                                    |
| `website_url`                     | `string`                  | URL pointing to the website representing the contract.                                                                        |

Metadata Property:

| Metadata Property           | Type         | Description                                                                                                                                                                                    |
| --------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`                      | `string`     | Name associated with the contract package.                                                                                                                                                     |
| `symbol`                    | `string`     | Contract package name pulled from the last version named keys. Contract package symbol pulled from the last version named keys. Applicable only for token contracts.                           |
| `decimals`                  | `uint8`      | Contract package token decimals pulled from the last version named keys. Applicable only for token contracts.                                                                                  |
| `balances_uref`             | `string(72)` | Contract package balances dictionary URef pulled from the last version named keys. Applicable only for token contracts.                                                                        |
| `total_supply_uref`         | `string(72)` | Contract package total supply URef pulled from the last version named keys. Applicable only for token contracts.                                                                               |
| `ownership_mode`            | `uint8`      | CEP-78 contract [ownership mode](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#ownership). Applicable only for CEP-78 contracts.                         |
| `nft_kind`                  | `uint8`      | CEP-78 contract [NFT kind](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#nftkind). Applicable only for CEP-78 contracts.                                 |
| `nft_metadata_kind`         | `uint8`      | CEP-78 contract [NFT metadata kind](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#nftmetadatakind). Applicable only for CEP-78 contracts.                |
| `whitelist_mode`            | `uint8`      | CEP-78 contract [whitelist mode](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#whitelistmode). Applicable only for CEP-78 contracts.                     |
| `holder_mode`               | `uint8`      | CEP-78 contract [holder mode](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#nftholdermode). Applicable only for CEP-78 contracts.                        |
| `minting_mode`              | `uint8`      | CEP-78 contract [minting mode](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#minting). Applicable only for CEP-78 contracts.                             |
| `burn_mode`                 | `uint8`      | CEP-78 contract [burn mode](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#burnmode). Applicable only for CEP-78 contracts.                               |
| `identifier_mode`           | `uint8`      | CEP-78 contract [identifier mode](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#nftidentifiermode). Applicable only for CEP-78 contracts.                |
| `metadata_mutability`       | `uint8`      | CEP-78 contract [metadata mutability mode](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#metadata-mutability). Applicable only for CEP-78 contracts.     |
| `owner_reverse_lookup_mode` | `uint8`      | CEP-78 contract [owner reverse lookup mode](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#ownerreverselookupmode). Applicable only for CEP-78 contracts. |
| `events_mode`               | `uint8`      | CEP-78 contract [events mode](https://github.com/casper-ecosystem/cep-78-enhanced-nft/blob/dev/docs/modalities.md#eventsmode). Applicable only for CEP-78 contracts.                           |

## Optional properties

Depending on the endpoint, the following optional property may be included in the `ContractPackage` entity:

| Property         | Type  | Description                                                                                                                                                                                                                |
| ---------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `deploys_number` | `int` | Number of deploys in the specified number of the past days. It's a [function includer](https://docs.cspr.cloud/1.5.x/documentation/overview/optional-properties#functions) that accepts the number of days as an argument. |

## Relations

The `ContractPackage` entity has the following relations with other entities:

| Entity                                                        | Mapping property        | Description                                                                                  |
| ------------------------------------------------------------- | ----------------------- | -------------------------------------------------------------------------------------------- |
| [`Deploy`](https://docs.cspr.cloud/1.5.x/rest-api/deploy)     | `contract_package_hash` | Contracts packages are deployed to the network with a deploy call.                           |
| [`Contract`](https://docs.cspr.cloud/1.5.x/rest-api/contract) | `contract_package_hash` | Contracts are different versions of the same smart contract included in the contract package |

## Endpoints

The `ContractPackage` entity has the following endpoints:

* [Get contract package](https://docs.cspr.cloud/1.5.x/rest-api/contract-package/get-contract-package)
* [Get contract packages](https://docs.cspr.cloud/1.5.x/rest-api/contract-package/get-contract-packages)

## Relation endpoints

The `ContractPackage` entity has the following relation endpoints:

* [Get contract package contracts](https://docs.cspr.cloud/1.5.x/rest-api/contract/get-contracts-by-contract-package)
* [Get contract package NFT tokens](https://docs.cspr.cloud/1.5.x/rest-api/non-fungible-token/get-contract-package-tokens) (applicable only to NFT contract packages)
* [Get contract package NFT token actions](https://docs.cspr.cloud/1.5.x/rest-api/non-fungible-token-action/get-contract-package-token-actions) (applicable only to NFT contract package)
* [Get contract package NFT token ownership](https://docs.cspr.cloud/1.5.x/rest-api/non-fungible-token-ownership/get-contract-package-token-ownership) (applicable only to NFT contract package)
* [Get contract package fungible token ownership](https://docs.cspr.cloud/1.5.x/rest-api/fungible-token-ownership/get-contract-package-fungible-token-ownership) (applicable only to fungible token contract package)
* [Get contract package fungible tokens](https://docs.cspr.cloud/1.5.x/rest-api/fungible-token-action/get-account-token-actions) (applicable only to fungible token contract package)
