Skip to main content

Ownership Transfers

Transferring ownership of an asset or a ticker on Polymesh is a critical operation that allows the current issuer/owner to hand over full control to another identity. This is distinct from transferring asset balances and involves the rights to manage, configure, and control the asset or ticker. Tickers are unique but can be unlinked from an asset, allowing the ticker to be transferred to a new asset.

Asset Ownership Transfer

Asset ownership transfer is a two-step process that uses the Polymesh Authorizations framework:

  1. Initiation (Authorization): The current owner (issuer), or a sufficiently permissioned asset agent, initiates a transfer by calling identity::add_authorization to create an authorization request of type TransferAssetOwnership for the target identity.
  2. Acceptance: The target identity must accept the authorization by calling asset::accept_asset_ownership_transfer and providing the associated authorization request ID for the transfer to complete. Until accepted, the transfer can be canceled by the original owner or rejected by the target identity using identity::remove_authorization.

Who Can Initiate a Transfer

Asset ownership transfer is not restricted to the current owner. For the transfer to complete, the authorization must have been created by an identity that is a permissioned agent for the asset and whose agent group grants permission for asset::accept_asset_ownership_transfer:

Agent groupCan initiate an asset ownership transfer?
FullYes. The current owner always qualifies, as the owner is automatically assigned to the Full group.
ExceptMetaYes. This group only excludes the ExternalAgents pallet, so the Asset pallet remains permitted.
PolymeshV1PIANo. Asset pallet access is limited to issue, redeem and controller_transfer.
PolymeshV1CAANo. Only the corporate action pallets are permitted.
Custom groupYes, if the group's permissions cover asset::accept_asset_ownership_transfer.

Creating the authorization is itself unrestricted: identity::add_authorization performs no asset-related validation, so any identity can create a TransferAssetOwnership request for any asset. The permission check runs when the recipient accepts, and a request created by an identity without the necessary permission simply fails at that point. A pending TransferAssetOwnership request in an identity's inbox is therefore not proof that the sender was entitled to send it.

Because the check uses chain state at acceptance time rather than at creation time, removing the authorizing agent, or moving them to a group that does not grant asset::accept_asset_ownership_transfer, before the recipient accepts will invalidate the pending request.

See Asset Agents & Permissions for how agent groups and their permissions are defined.

This applies to asset ownership only. Ticker ownership transfer is checked differently: asset::accept_ticker_transfer requires the authorization to have been created by the ticker owner, so agents cannot initiate one.

warning

Delegating agent permissions broadly can hand over the ability to give the asset away. Any agent holding permission for asset::accept_asset_ownership_transfer can initiate a transfer of the entire asset to another identity. Issuers should review which agent groups grant this extrinsic, and which identities belong to them, as part of ongoing asset administration.

info

If there is a Ticker linked to an asset, the ownership of that ticker will also transfer to the new asset owner.

Important Warning

Transferring asset ownership updates agent assignments automatically. The previous owner is removed as an agent and the new owner is added as a Full agent when the transfer completes. Other agents and their permissions are unchanged.

After a transfer, the new owner should review and update the list of asset agents and their permissions to ensure only trusted parties retain access.

See Asset Agents & Permissions for more information.

Ticker Ownership Transfer (Linking & Unlinking)

Tickers are unique symbols that can be linked to assets for a more human-readable way to identify an asset and for discoverability. Ticker ownership can also be transferred between identities using a similar authorization and acceptance process. A ticker with an active registration, or one that is fully owned and not linked to an asset, can be transferred.

  • Linking a Ticker: Associates a registered ticker with an asset. Only the ticker owner can perform this action.
  • Unlinking a Ticker: Removes the association between a ticker and an asset. Only the asset owner or authorized agent can perform this action.
  • Transferring Ticker Ownership: The target identity must accept the authorization by calling asset::accept_ticker_transfer and providing the associated authorization request ID for the transfer to complete. Until accepted, the transfer can be canceled by the original owner or rejected by the target identity using identity::remove_authorization.

Ticker Transfer Process

  1. Unlinking a Ticker: If the ticker is currently linked to an asset and is not being transferred with the asset, it should first be unlinked by calling asset::unlink_ticker_from_asset_id.
  2. Initiation (Authorization): The current owner initiates a ticker transfer by calling identity::add_authorization to create an authorization request of type TransferTicker for the target identity.
  3. Accept Transfer: The new owner accepts the authorization to complete the transfer.
  4. Linking a Ticker: Once the ownership has transferred, the new owner can link the ticker to a new asset by calling asset::link_ticker_to_asset_id.

Summary

Transferring asset or ticker ownership is a powerful feature for managing the lifecycle of assets on Polymesh. Always ensure that after a transfer, agent permissions and related controls are reviewed and updated as needed to maintain security and compliance.