Issuers

Introduction


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

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 are provided to manage and automate Issuance.

Issuance Functions


1. Issuing a token


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 API to create the token on the issuer's behalf and grant master_authority to the issuer's specified address.

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

Note: The master_authority cannot be reassigned after token creation

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

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

Master authority

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

The master_authority can assign or revoke the following roles:

The Master Authority can perform all the functions of all other authority types.

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.

Authority Type
Max Addresses
Capabilities

master_mint_burn_authority

1

Grant/revoke minting/burning privileges, set mint limits (cannot mint directly)

mint_burn_authorities

20

Mint tokens (up to allowance), burn tokens from any account (cannot grant privileges)

pause_authorities

5

Pause/unpause all token operations

list_authorities

5

Blacklist/Whitelist addresses (preventing/allowing them from sending/receiving tokens)

metadata_update_authorities

5

Update token name, URI, and additional metadata

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

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

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

master_authority can use the grant authority API to grant or revoke authorities to specific addresses:

  • In "action" - select either Grant or Revoke

  • Select the appropriate "authority_type" : MasterMintBurn, MintTokens, Pause, Burn, Blacklist, Whitelist , UpdateMetadata

Example:

cURL
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"
    }
  }'

3. Pausing and unpausing the token


When the 1Money Network Operator creates a token for an issuer, the token will be paused by default.

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

The pause_authorities must unpause the token before it can be transferred, minted or burned.

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.

To unpause a token, the pause_authorities can use the pause/unpause API:

cURL
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"
    }
  }'

Similarly, to pause the token again, pause can be passed through the action parameter.

4. Granting mint and burn authorities


The master_mint_burn_authority has the power to grant mint_burn_authorities to specific addresses of their choosing.

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.

Use the grant authority API to set the mint_burn_authorities :

cURL
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"
    }
  }'

5. Minting tokens


Only the master_authority and mint_burn_authorities can mint tokens.

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

Use the mint API:

cURL
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"
    }
  }'

6. Burning tokens


mint_burn_authorities can burn tokens through the burn API:

cURL
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"
    }
  }'

7. Blacklisting/Whitelisting an address


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 API to whitelist addresses by setting the "action" to "Blacklist" or "Whitelist":

cURL
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"
    }
  }'

8. Updating token metadata


metadata_update_authorities can use the update token metadata API:

cURL
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"
    }
  }'

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

Last updated