Each type of balance in the ledger is called an asset. For example, if your application manages multiple types of currencies, you might create a USD asset, an EUR asset, and a CNY asset.

Once an asset is created, you can issue an amount into an account. Once an amount of an asset is issued, it can be transferred between accounts or retired from circulation.

The balance of an asset in an account can never be negative. An amount must exist in the account in order to be transferred.


An asset alias is a user-defined, unique identifier. It can be used interchangeably with the system-assigned asset_id when building transactions and performing queries.

Keys & Quorum

When creating an asset, you provide one or more keys and a quorum. The quorum is the number of keys that must sign a transaction in order to issue an amount of the asset into the ledger. By default, the quorum is equal to the number of keys provided, but you can choose to require only a subset of keys – for example, 2-of-3.


Asset tags are a set of user-defined key-value pairs associated with an asset. Asset tags are useful for grouping different assets together for the purpose of querying balances.

For example, if you have three different points assets, they could all have the tag "type": "point". Then, when you want to query the total balance of all "points" in User 1's account, you would provide the following filter to the balance query:

account_alias='user1' AND asset_tags.type='point'

and set the sum_by parameter as:


This would return a single aggregate sum of all assets in the account with the tag "type": "point".

Updating tags

You can update asset tags at any time. Asset queries can then be performed on the updated tags.

For transaction, contract, and balance queries, however, updated tags are not applied retroactively. The transaction object (and resulting contract objects) will always reflect the tags that were present when the transaction was added to the ledger.

Data Structure

JSON response from the API:

  "id": "...",
  "alias": "...",
  "tags": {},
  "keys": [
      "id": "...",
      "alias": "..."
  "quorum": 1

Descriptions of each field:

Field Type Description
id string System-assigned unique identifier of the asset.
alias string User-supplied unique identifier of the asset.
tags JSON object Arbitrary, user-supplied, key-value data about the asset.
keys array A list of key objects that control issuance of the asset.
quorum integer The number of keys from which signatures are required to issue units of the asset.


Create asset

Asset usd = new Asset.Builder()
  .addTag("type", "currency")
  alias: 'usd',
  keys: [key],
  tags: {type: 'currency'}
}).then(usd => ...)
usd = ledger.assets.create(
  alias: 'usd',
  keys: [key],
  tags: {type: 'currency'}

Query assets

Query all "currency" assets.

Asset.ItemIterable assets = new Asset.QueryBuilder()
for (Asset asset : assets) {
  filter: 'tags.type=$1',
  filterParams: ['currency']
}).then(assets => {
  for (let i in assets) {
    const asset = assets[i];
  filter: 'tags.type=$1',
  filter_params: ['currency']
).each do |asset|