Native Assets
Overview
Polymesh supports the issuance and management of both fungible and non-fungible native assets.
While each asset type has specific differences in issuance and definition, both fungible and non-fungible assets use the Settlement and Compliance modules consistently. This consistency allows both asset types to share attestations and be settled collectively.
Asset IDs
Each native asset on Polymesh has a unique Asset ID - a 16-byte UUID generated by Polymesh when the asset is created on-chain.
This Asset ID uniquely identifies each asset, independent of any additional metadata such as external identifiers or tickers.
Ticker Registration
In addition to the system-generated Asset ID, an issuer may optionally associate their asset with a unique ticker.
Tickers are always unique but optional, and they must be registered through a three-step process:
- Register a unique ticker, paying the 25 POLYX protocol fee.
- Create an asset, with Polymesh generating a unique Asset ID.
- Link the registered ticker to the unique Asset ID.
Users can register a ticker and then create an asset associated with that ticker when ready, or they can first create an asset and attach a ticker later.
Ticker registrations are transferable between identities and expire 60 days from initial registration.
Registering a ticker prevents others from issuing an asset with that ticker while the registration is valid and incurs a protocol fee (currently 25 POLYX).
External Identifiers
Each asset on Polymesh can optionally be associated with external identifiers, such as CUSIPs, ISINs, or other identifiers.
These identifiers can be set when an asset is created and modified by the issuer or their agent after creation.
Documentation
Polymesh allows issuers to associate documents with their assets.
The actual document is not stored on-chain; instead, a reference is added, including the document's name, URL (which may require credentials to access), document type, filing date, and a hash of its contents.
Only the asset issuer or an appointed agent can add or remove documentation.
Metadata
Polymesh allows issuers (or their agents) to manage metadata associated with their assets. This metadata can be used to store key-value pairs, which can be informational or drive business logic (e.g., if read by a smart contract).
Metadata is categorized as either local (directly associated with an individual asset) or global (set through on-chain governance and likely relevant across multiple assets).
Ownership
All native asset balances on Polymesh are held at the identity level, unlike POLYX balances, which are held at the individual key level. While an investor can organize their assets into portfolios under their identity, compliance is enforced at the identity level. Therefore, to send or receive an asset, the identity must meet the compliance rules specified by the asset issuer.
Asset Issuers
The asset issuer is the identity that created the asset and can transfer ownership by issuing a TransferAsset
authorization to another identity, which must accept it.
The issuer also has additional controls exclusive to them or their agents, such as:
- Updating documentation and identifiers
- Freezing and unfreezing transfers
- Adding and removing compliance rules
- Granting settlement permissions to venues
- Managing asset metadata
- Issuing and redeeming assets
- Adding or removing mandatory mediators for transfers
- Linking or unlinking a ticker
The issuer or an agent can also perform a "controller transfer", allowing them to transfer ownership of tokens back to the issuer or agent.
Issuance
Polymesh’s issuance process allows issuers or their appointed agent to mint assets to a portfolio they control and then transfer these assets to investors through a Settlement instruction.
Roles
Each asset, identified by its unique Asset ID, is associated with one or more identities:
- Asset issuer's identity: The identity that created the asset.
- External agent identities: Optional identities responsible for managing the asset on behalf of the issuer.
External Agents
External agents are Polymesh identities granted permissions for a specific Asset ID. They manage aspects such as compliance rules, documentation, and issuance.
The issuer is automatically assigned as an external agent with full permissions. Additional agents can be added by existing agents (including the issuer), requiring acceptance of a BecomeAgent
authorization.
Agents are placed in permission groups, which determine their capabilities. Pre-defined groups include:
- Full: All permissions.
- ExceptMeta: Manages everything except agent identities and permissions.
- PolymeshV1PIA: Corresponds to a Primary Issuance Agent (PIA) on Polymesh Mainnet v1.
- PolymeshV1CAA: Corresponds to a Corporate Action Agent (CAA) on Polymesh Mainnet v1.
- Custom: Custom permissions as specified by the issuer.
Agents can create a custom permission group which can be referenced when using the Custom
enum variant, assigning permissions as appropriate for their use case, and then assign that group to external agents associated with their asset.
Polymesh requires at least one identity to hold full permissions for each asset, typically the issuer, though this role can be delegated to a third-party agent who may then limit the issuer's permissions if necessary.