# 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.2.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.                                                                    |

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.2.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.2.x/rest-api/deploy)     | `contract_package_hash` | Contracts packages are deployed to the network with a deploy call.                           |
| [`Contract`](https://docs.cspr.cloud/1.2.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.2.x/rest-api/contract-package/get-contract-package)
* [Get contract packages](https://docs.cspr.cloud/1.2.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.2.x/rest-api/contract/get-contracts-by-contract-package)
* [Get contract package NFT tokens](https://docs.cspr.cloud/1.2.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.2.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.2.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.2.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.2.x/rest-api/fungible-token-action/get-account-token-actions) (applicable only to fungible token contract package)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cspr.cloud/1.2.x/rest-api/contract-package.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
