# Issuers

## Introduction

***

Robust, role-based issuance and compliance features are offered on the 1Money Network.&#x20;

This guide covers:

* Token access types (public vs. private)
* Authority hierarchy and permissions (to assign and revoke priviledges)
* Token operations (mint, burn, pause, blacklist, whitelist, metadata updates)
* Using the API for authority management

A [comprehensive set of APIs and SDKs](https://developer.1moneynetwork.com/integrations) are provided to manage and automate Issuance.&#x20;

## Issuance Functions

***

* [Issuing a token](#id-1.-issuing-a-token)
* [Token authority system ](#id-2.-the-authority-system)
* [Granting and revoking authority](#granting-or-revoking-authorities)
* [Pausing and unpausing the token](#id-3.-pausing-and-unpausing-the-token)
* [Minting tokens](#id-5.-minting-tokens)
* [Burning tokens](#id-6.-burning-tokens)
* [Blacklisting/Whitelisting addresses](#id-7.-blacklisting-whitelisting-an-address)&#x20;
* [Updating token metadata ](#id-11.-update-token-metadata)

## 1. Issuing a token&#x20;

***

When creating a Token, Issuers must choose between:

* **Public Token**: Accessible to all network participants, except those blacklisted by the issuer.
* **Private Token**: Restricted to whitelisted addresses only.

The 1Money Network Operator will use the [issue token](https://developer.1moneynetwork.com/integrations/rest-apis/tokens/issue-token) API to create the token on the issuer's behalf and grant `master_authority` to the issuer's specified address.&#x20;

## 2. The authority system

***

The `master_authority` is the root of the permission hierarchy and has complete control over the token capabilities for the token. It can:

* Grant and revoke all other authority types
* Mint tokens without allowance restrictions

{% hint style="info" %}
Note: The `master_authority` cannot be reassigned after token creation
{% endhint %}

The **Authority system** follows a hierarchical structure with the `master_authority` at the top:

<figure><img src="https://4159296839-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMGfgHPM6XVp6jLGUpzH%2Fuploads%2Fn5wJgusOqhUVXNA3Pm1V%2FScreenshot%202025-06-21%20at%204.40.10%E2%80%AFPM.png?alt=media&#x26;token=3080058c-ed82-4b5f-9afd-884c447d4424" alt=""><figcaption></figcaption></figure>

**The Master Authority** wallet can be secured using MPC solutions for multi party signing workflows available on most Custodian platforms.&#x20;

### **Master authority**

The Master Authority serves as the "super admin" for managing rights to other sub-authorities for a given Token.&#x20;

The `master_authority` can assign or revoke the following roles:

{% hint style="info" %}
The **Master Authority** can perform **all the functions** of all other authority types.&#x20;

As such you can **simplify** your workflows by designating only the Master Authority.

Alternatively, you can choose to split these functions across other roles, you can assign different addresses for a more **advanced** management model.&#x20;
{% endhint %}

<table><thead><tr><th width="281.3125">Authority Type</th><th width="135.22265625">Max Addresses</th><th>Capabilities</th></tr></thead><tbody><tr><td><code>master_mint_burn_authority</code></td><td>1</td><td>Grant/revoke minting/burning privileges, set mint limits (cannot mint directly)</td></tr><tr><td><code>mint_burn_authorities</code></td><td>20</td><td>Mint tokens (up to allowance), burn tokens from any account (cannot grant privileges)</td></tr><tr><td><code>pause_authorities</code></td><td>5</td><td>Pause/unpause all token operations</td></tr><tr><td><code>list_authorities</code></td><td>5</td><td>Blacklist/Whitelist addresses (preventing/allowing them from sending/receiving tokens)</td></tr><tr><td><code>metadata_update_authorities</code></td><td>5</td><td>Update token name, URI, and additional metadata</td></tr></tbody></table>

### **Authority privileges**

#### Minting and Burning

* Only the `master_authority` and `mint_burn_authorities` can mint tokens.
  * `master_authority`: Unlimited minting
  * `mint_burn_authorities`: Minting up to assigned allowance
* Both can burn tokens from any account.

#### Listing(Blacklisting/Whitelisting)

* Only `list_authorities` can blacklist/whitelist addresses.
* Blacklisted addresses cannot send or receive tokens.
* Whitelisted addresses can participate in private token operations.
* Listing is immediate&#x20;

#### Pausing and Unpausing

* Only `pause_authorities` can pause or unpause tokens.
* **Paused State**: All transfers, mints, and burns are disabled. Useful for emergencies or maintenance.
* **Unpaused State**: All token operations resume.
* The `master_authority` retains the ability to manage authorities even when paused.

#### Metadata Updates

* Only `metadata_update_authorities` can update token metadata.
* Changes are effective immediately.
* The token URI can point to a JSON file with additional information.
* Additional metadata supports arbitrary key-value pairs.

### Summary Table: Authority Actions <a href="#summary-table-authority-actions" id="summary-table-authority-actions"></a>

| Action             | Authority Required                          |
| ------------------ | ------------------------------------------- |
| Grant/revoke roles | `master_authority`                          |
| Mint tokens        | `master_authority`, `mint_burn_authorities` |
| Burn tokens        | `master_authority`, `mint_burn_authorities` |
| Pause/unpause      | `pause_authorities`                         |
| Blacklist address  | `list_authorities`                          |
| Whitelist address  | `list_authorities`                          |
| Update metadata    | `metadata_update_authorities`               |

### Granting or revoking authorities&#x20;

`master_authority` can use the [grant authority](https://developer.1moneynetwork.com/integrations/rest-apis/tokens/grant-authority) API to grant or revoke authorities to specific addresses:

* In "action" - select either `Grant` or `Revoke`&#x20;
* Select the appropriate "authority\_type" : `MasterMintBurn`, `MintTokens`, `Pause`, `Burn`, `Blacklist`, `Whitelist` , `UpdateMetadata`&#x20;

Example:&#x20;

{% code title="cURL" %}

```sh
curl -L \
  --request POST \
  --url 'https://api.testnet.1money.network/v1/tokens/grant_authority' \
  --header 'Content-Type: application/json' \
  --data '{
    "action": "Grant",
    "authority_address": "0x9E1E9688A44D058fF181Ed64ddFAFbBE5CC742Ab",
    "authority_type": "MasterMintBurn",
    "chain_id": 1212101,
    "nonce": 0,
    "token": "0x6ADE9688A44D058fF181Ed64ddFAFbBE5CC742Ac",
    "value": "1500000000",
    "signature": {
      "r": "72956732934625920503481762689501378577921804342307439094906376029324416116949",
      "s": "29902520081700531224291681396692026253288382272435451874524203378285409371412",
      "v": "1"
    }
  }'
```

{% endcode %}

## 3. Pausing and unpausing the token &#x20;

***

When the 1Money Network Operator creates a token for an issuer, the **token will be paused by default**.&#x20;

When a token is **paused**:

* No transfers, mints, or burns can occur
* Pausing is effective immediately

This is useful for emergency situations or scheduled maintenance

{% hint style="warning" %}
The `master_authority` can still **grant and revoke** all authority types while their token is paused.&#x20;
{% endhint %}

The `pause_authorities` must unpause the token before it can be transferred, minted or burned.&#x20;

When a token is **unpaused**:

* Transfers, mints, or burns can occur
* Unpausing is effective immediately
* All token operations resume normal functionality

The transaction signer must be the token's `pause_authorities` to pause or unpause a token.&#x20;

To **unpause** a token, the `pause_authorities` can use the [pause/unpause](https://developer.1moneynetwork.com/integrations/rest-apis/tokens/pause-unpause) API:

{% code title="cURL" %}

```sh
curl -L \
  --request POST \
  --url 'https://api.testnet.1money.network/v1/tokens/pause' \
  --header 'Content-Type: application/json' \
  --data '{
    "action": "Unpause",
    "chain_id": 1212101,
    "nonce": 0,
    "token": "0x6ADE9688A44D058fF181Ed64ddFAFbBE5CC742Ac",
    "signature": {
      "r": "72956732934625920503481762689501378577921804342307439094906376029324416116949",
      "s": "29902520081700531224291681396692026253288382272435451874524203378285409371412",
      "v": "1"
    }
  }'
```

{% endcode %}

Similarly, to pause the token again, `pause` can be passed through the `action` parameter. &#x20;

## 4. Granting mint and burn authorities &#x20;

***

The `master_mint_burn_authority` has the power to grant `mint_burn_authorities` to specific addresses of their choosing.&#x20;

`mint_burn_authorities` have minting privileges and can create new tokens up to their allowance limit but cannot grant minting privileges to others. They can also burn tokens from any account.&#x20;

Use the [grant authority](https://developer.1moneynetwork.com/integrations/rest-apis/tokens/grant-authority) API to set the `mint_burn_authorities` :

{% code title="cURL" %}

```sh
curl -L \
  --request POST \
  --url 'https://api.testnet.1money.network/v1/tokens/grant_authority' \
  --header 'Content-Type: application/json' \
  --data '{
    "action": "Grant",
    "authority_address": "0x9E1E9688A44D058fF181Ed64ddFAFbBE5CC742Ab",
    "authority_type": "MintTokens",
    "chain_id": 1212101,
    "nonce": 0,
    "token": "0x6ADE9688A44D058fF181Ed64ddFAFbBE5CC742Ac",
    "value": "0",
    "signature": {
      "r": "72956732934625920503481762689501378577921804342307439094906376029324416116949",
      "s": "29902520081700531224291681396692026253288382272435451874524203378285409371412",
      "v": "1"
    }
  }'
```

{% endcode %}

## 5. Minting tokens &#x20;

***

Only the `master_authority` and `mint_burn_authorities` can mint tokens.&#x20;

`master_authority` can mint tokens **without allowance restrictions**, while the `mint_burn_authorities` can mint new tokens **up to their allowance.**

Use the [mint](https://developer.1moneynetwork.com/integrations/rest-apis/tokens/mint) API:&#x20;

{% code title="cURL" %}

```sh
curl -L \
  --request POST \
  --url 'https://api.testnet.1money.network/v1/tokens/mint' \
  --header 'Content-Type: application/json' \
  --data '{
    "chain_id": 1212101,
    "nonce": 0,
    "recipient": "0x9E1E9688A44D058fF181Ed64ddFAFbBE5CC742Ab",
    "token": "0x6ADE9688A44D058fF181Ed64ddFAFbBE5CC742Ac",
    "value": "1500000000",
    "signature": {
      "r": "72956732934625920503481762689501378577921804342307439094906376029324416116949",
      "s": "29902520081700531224291681396692026253288382272435451874524203378285409371412",
      "v": "1"
    }
  }'
```

{% endcode %}

## 6. Burning tokens&#x20;

***

&#x20;`mint_burn_authorities` can burn tokens through the [burn](https://developer.1moneynetwork.com/integrations/rest-apis/tokens/burn) API:

{% code title="cURL" %}

```sh
curl -L \
  --request POST \
  --url 'https://api.testnet.1money.network/v1/tokens/burn' \
  --header 'Content-Type: application/json' \
  --data '{
    "chain_id": 1212101,
    "nonce": 0,
    "recipient": "0x9E1E9688A44D058fF181Ed64ddFAFbBE5CC742Ab",
    "token": "0x6ADE9688A44D058fF181Ed64ddFAFbBE5CC742Ac",
    "value": "1500000000",
    "signature": {
      "r": "72956732934625920503481762689501378577921804342307439094906376029324416116949",
      "s": "29902520081700531224291681396692026253288382272435451874524203378285409371412",
      "v": "1"
    }
  }'

```

{% endcode %}

## 7. Blacklisting/Whitelisting an address&#x20;

***

{% hint style="warning" %}
We have **public/private** token.\
\
In public token mode, if an address is blacklisted, it will be put into blacklist and cannot send and receive with that address, using whitelist to bring it back thus can send and receive again(but will not put it into whitelist table.).\
\
In private token mode, if an address is not blacklisted, it cannot send or receive any token, when we whitelist the address, it can send and receive, we can use the blacklist feature to remove it from the whitelist, thus it cannot send and receive again(but will not put it into blacklist table.).
{% endhint %}

Only the `list_authorities` can **blacklist/whitelist addresses**. This adds an account to the token's blacklist, preventing it from participating in token operations.

Parameters:

* address: Address - The address to blacklist/whitelist

Required Permissions:

* The transaction signer must be in the token's `list_authorities` list

Note:

* Blacklisted addresses cannot send or receive tokens
* Whitelisted addresses can send or receive tokens
* Blacklisting is effective immediately
* The token account must exist and be associated with the token

Use the [mangelist](https://developer.1moneynetwork.com/integrations/rest-apis/tokens/blacklist) API to whitelist addresses by setting the "action" to "Blacklist" or "Whitelist":

{% code title="cURL" %}

```sh
curl -L \
  --request POST \
  --url 'https://api.testnet.1money.network/v1/tokens/blacklist' \
  --header 'Content-Type: application/json' \
  --data '{
    "action": "Blacklist",
    "address": "0x9E1E9688A44D058fF181Ed64ddFAFbBE5CC742Ab",
    "chain_id": 1212101,
    "nonce": 0,
    "token": "0x6ADE9688A44D058fF181Ed64ddFAFbBE5CC742Ac",
    "signature": {
      "r": "72956732934625920503481762689501378577921804342307439094906376029324416116949",
      "s": "29902520081700531224291681396692026253288382272435451874524203378285409371412",
      "v": "1"
    }
  }'
```

{% endcode %}

## 8. Updating token metadata

***

&#x20;`metadata_update_authorities` can use the [update token metadata](https://developer.1moneynetwork.com/integrations/rest-apis/tokens/update-token-metadata) API:

{% code title="cURL" %}

```sh
curl -L \
  --request POST \
  --url 'https://api.testnet.1money.network/v1/tokens/update_metadata' \
  --header 'Content-Type: application/json' \
  --data '{
    "additional_metadata": "[{\"key1\":\"v1\",\"key2\":\"v2\"}]",
    "chain_id": 1212101,
    "name": "TEST Stablecoin",
    "is_private": true,
    "nonce": 0,
    "token": "0x6ADE9688A44D058fF181Ed64ddFAFbBE5CC742Ac",
    "uri": "https://test.com",
    "signature": {
      "r": "72956732934625920503481762689501378577921804342307439094906376029324416116949",
      "s": "29902520081700531224291681396692026253288382272435451874524203378285409371412",
      "v": "1"
    }
  }'
```

{% endcode %}

This updates the token's metadata.

Note:

* Metadata updates are effective immediately
* The URI can point to a JSON file with additional information
* Additional metadata can store arbitrary key-value pairs
