# Mosaic¶

Mosaics are part of what makes the Smart Asset System unique and flexible. They are fixed assets that can represent a set of multiple identical things that do not change.

A mosaic could be a token, but it could also be a collection of more specialized assets such as reward points, shares of stock, signatures, status flags, votes or even other currencies.

Each mosaic has a unique identifier represented as a 64-bit unsigned integer and a set of configurable properties and flags that can be defined during the mosaic creation.

## Properties¶

Find below the complete list of configurable properties.

### Divisibility¶

Determines the decimal place to which the mosaic can be divided. Divisibility of 3 means that the smallest fraction a mosaic can be divided into will be 0.001. The divisibility must be in the range of 0 and 6.

### Initial supply¶

Indicates the amount of mosaic in circulation. The total supply must be in the range of 0 and 9,000,000,000,000,000 atomic units.

Catapult works with absolute amounts. To get an absolute amount, multiply the amount of assets you want to create or send by 10divisibility.

For example, if the mosaic has divisibility 2, to create or send 10 units (relative) you should define 1,000 (absolute) instead.

### Duration¶

Specifies the number of confirmed blocks the mosaic is rented for. It is allowed to lie in Catapult’s public network up to 3650 days (10 years), being this parameter editable per network. Non-expiring mosaics can be created by setting this property to 0.

You can use the following formula to convert approximately days to blocks:

$duration ≈ numberOfDays * 86400 / blockGenerationTargetTimeInSeconds$

### Supply mutable¶

If set to true, the mosaic supply can change at a later point. Otherwise, the mosaic supply remains immutable.

### Transferable¶

Example of a non-transferable mosaic

If set to true, the mosaic can be transferred between arbitrary accounts. Otherwise, the mosaic can only be transferred back to the mosaic creator.

### Restrictable¶

Example of a mosaic restriction

If set to true, the mosaic creator can configure custom restrictions.

## Rental fee¶

To create a mosaic, accounts have to pay a rental fee in addition to the transaction fee. The fees will be deducted from the account’s balance after the announcement of a valid MosaicDefinitionTransaction.

By default, registering a mosaic in Catapult’s public network has an initial cost of 0.0005 symbol.xym. However, the network dynamically adjusts the mosaic rental fee over time.

To calculate the effective rental fee, the network multiplies the default value set in the configuration by the median network multiplier over last maxDifficultyBlocks. In case there are zero multipliers, these are replaced by the defaultDynamicFeeMultiplier before the median calculation.

## Transaction schemas¶

### MosaicDefinitionTransaction¶

Announce a MosaicDefinitionTransaction to create a new mosaic.

Version: 0x01

EntityType: 0x414D

Inlines:

Property Type Description
id MosaicId Identifier of the mosaic.
duration BlockDuration Mosaic duration expressed in blocks. If set to 0, the mosaic is non-expiring.
nonce uint32 Random nonce used to generate the mosaic id.
flags MosaicFlag Mosaic flags.
divisibility uint8 Mosaic divisibility.

### MosaicSupplyChangeTransaction¶

Announce a supply change transaction to increase or decrease a mosaic’s supply.

Version: 0x01

EntityType: 0x424D

Inlines:

Property Type Description
mosaicId UnresolvedMosaicId Affected mosaic identifier.
delta Amount Amount of supply to increase or decrease.
action MosaicSupplyChangeAction Supply change action.

### Mosaic¶

Property Type Description
mosaicId MosaicId Mosaic identifier.
amount Amount Mosaic amount.

### UnresolvedMosaic¶

Property Type Description
mosaicId UnresolvedMosaicId Mosaic identifier. If the most significant bit of byte 0 is set, a namespaceId (alias) is used instead of the real mosaic identifier.
amount Amount Mosaic amount.

### MosaicFlags¶

Enumeration: uint8

Id Description
0x00 No flags present.
0x01 Mosaic supports supply changes even when the mosaic creator owns partial supply.
0x02 Mosaic supports transfers between arbitrary accounts. When not set, the mosaic can only be transferred to/from the mosaic creator.
0x04 Mosaic creator can add rules to restrict which accounts are enabled to send and receive the mosaic.

### MosaicSupplyChangeAction¶

Enumeration: uint8

Id Description
0x00 Decrease.
0x01 Increase.

Continue: Namespaces.