# Transfer

The `Transfer` entity represents a successful native token (CSPR) transfer on the Casper network. Transfers are tracked from the [`WriteTransfer`](https://docs.casper.network/developers/json-rpc/types_chain/#transform) transforms found in the deploy execution results.

## Properties

The `Transfer` entity has the following properties:

| Property                 | Type         | Description                                                                                                                                 |
| ------------------------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                     | `uint64`     | Transfer identifier provided by the deploy caller if the deploy is a native transfer. Default is `0`.                                       |
| `deploy_hash`            | `string(64)` | Deploy hash represented as a hexadecimal string                                                                                             |
| `block_height`           | `uint64`     | Height of the block in which the transfer happened                                                                                          |
| `transform_key`          | `string(64)` | [`WriteTransfer`](https://docs.casper.network/developers/json-rpc/types_chain/#transform) transform key represented as a hexademical string |
| `initiator_account_hash` | `string(64)` | Deploy caller account hash represented as a hexadecimal string                                                                              |
| `from_purse`             | `string(73)` | Source purse URef in the `uref-dead...beef-007` format                                                                                      |
| `to_purse`               | `string(73)` | Target purse URef in the `uref-dead...beef-007` format                                                                                      |
| `to_account_hash`        | `string(64)` | Transfer recipient account hash represetnted as a hexadecimal string                                                                        |
| `amount`                 | `string`     | Transfer amount in motes. The type is `string` to avoid overflow in languages that don't support uint64, which is the correct type.         |
| `timestamp`              | `string`     | Deploy creation timestmap in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format                                                  |

**Example**

```json
{
  "amount": "999900000000",
  "deploy_hash": "00002856709bb267fefac532afa41fdb7b66af0521b344dd218f0386b725bcfc",
  "block_height": 2404577,
  "from_purse": "uref-1fba1ec9ab80f4df6d4dd2b9963fc0e8bcd3e3ae2479bd89133213398f463f8b-007",
  "id": 1674228372106,
  "initiator_account_hash": "d1e7f6267837c30c7e3356f049836b5db71ab10f023ddb00e6ab0bd960bf7e4d",
  "timestamp": "2023-01-20T15:26:34Z",
  "to_account_hash": "11f03518b71ba8ac0e6087d1a2b0a82a97de66f640ae77e661ce80e365196a24",
  "to_purse": "uref-6ccb3f9c96957eae5c0f2d4d1106926bcf5ab5a2690a3f07da9603d8236e3e26-004",
  "transform_key": "ab152ea01deca92473828fff439d6b8498397a7cceaff059e12d2aa2fe3f5ce5"
}
```

## Optional properties

Depending on the endpoint some of the following optional properties may be included in the `Transfer` entity:

| Property                              | Type                                                                                        | Description                                                                                                                                            |
| ------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `initiator_public_key`                | `string(68)`                                                                                | Initiator public key represented as a hexademical string                                                                                               |
| `to_public_key`                       | `string(68)`                                                                                | Transfer recipient public key represented as a hexademical string                                                                                      |
| `from_purse_public_key`               | `string(68)`                                                                                | Public key of the account that owns the transfer source purse represented as a hexademical string. null when the sender purse is not own by an account |
| `to_purse_public_key`                 | `string(68)`                                                                                | Public key of the account that owns the transfer target purse represented as a hexademical string. null when the target purse is not own by an account |
| `to_account_info`                     | [`AccountInfo`](https://docs.cspr.cloud/1.5.x/rest-api/account-info)                        | Transfer recipient account info                                                                                                                        |
| `to_centralized_account_info`         | [`CentralizedAccountInfo`](https://docs.cspr.cloud/1.5.x/rest-api/centralized-account-info) | Transfer recipient centralized account info                                                                                                            |
| `from_purse_account_info`             | [`AccountInfo`](https://docs.cspr.cloud/1.5.x/rest-api/account-info)                        | Account info of the account that owns the transfer source purse. null when the sender purse is not own by an account                                   |
| `from_purse_centralized_account_info` | [`CentralizedAccountInfo`](https://docs.cspr.cloud/1.5.x/rest-api/centralized-account-info) | Centralized account info that owns the transfer source purse. null when the sender purse is not own by an account                                      |
| `to_purse_account_info`               | [`AccountInfo`](https://docs.cspr.cloud/1.5.x/rest-api/account-info)                        | Account info of the account that owns the transfer target purse. null when the target purse is not own by an account                                   |
| `to_purse_centralized_account_info`   | [`CentralizedAccountInfo`](https://docs.cspr.cloud/1.5.x/rest-api/centralized-account-info) | Centralized account info of the account that owns the transfer target purse. null when the target purse is not own by an account                       |
| `initiator_public_key`                | `string(68)`                                                                                | Deploy caller public key represented as a hexadecimal string                                                                                           |
| `rate`                                | `float32`                                                                                   | CSPR rate for specified currency that was relevant at the moment of deploy creation                                                                    |
| `initiator_cspr_name`                 | `string`                                                                                    | Primary CSPR.name of the initiator account                                                                                                             |
| `to_cspr_name`                        | `string`                                                                                    | Primary CSPR.name of the recipient account                                                                                                             |
| `from_purse_cspr_name`                | `string`                                                                                    | Primary CSPR.name of the account that owns the transfer source purse                                                                                   |
| `to_purse_cspr_name`                  | `string`                                                                                    | Primary CSPR.name of the account that owns the transfer target purse                                                                                   |

## Relations

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

| Entity                                                      | Mapping property                            | Description                               |
| ----------------------------------------------------------- | ------------------------------------------- | ----------------------------------------- |
| [`Account`](https://docs.cspr.cloud/1.5.x/rest-api/account) | `initiator_account_hash`, `to_account_hash` | Accounts can send and receive transfers   |
| [`Deploy`](https://docs.cspr.cloud/1.5.x/rest-api/deploy)   | `deploy_hash`                               | Transfers are results of deploy execution |

## Endpoints

The `Transfer` entity has the following endpoints:

* [Get account transfers](https://docs.cspr.cloud/1.5.x/rest-api/transfer/get-account-transfers)
* [Get deploy transfers](https://docs.cspr.cloud/1.5.x/rest-api/transfer/get-deploy-transfers)

## Relation endpoints

None
