How To Guides

How to set up an RTP Ledger

Learn how to configure Ledger and Studio for RTP.

In order to set up a ledger for RTP, you will need to run a few layouts from the command line using the minka CLI tool. In case you don't have it set up already, check out Connecting to the Minka Sandbox server . In case you want to know more about the minka CLI tool, you can browse the CLI reference .

If you already have a ledger, you may need to run just some of the steps below in order.

Connect to ledger instance

In case you are not already connected to a ledger instance, you should start by doing that. We will be running this example in the staging environment:

$ minka server connect
? Server URL: https://ldg-stg.one/api/v2

✅ Connected to server stg (https://ldg-stg.one/api/v2)

No active ledger is selected, to select one, please use:
 > minka ledger select

Create ledger owner signer

We will start by creating an owner Signer for our ledger.

$ minka signer create owner
? Key pair source: Generate new key pair
? Add custom data? No
? Signer password: [hidden]
? Repeat password: [hidden]
Signer owner saved locally.

✅ Signer created successfully:

Signer summary:
---------------------------------------------------------------------------
Handle: owner
Public: aeblUjUYsPlYsWzWfajZIExO2Dz5NVbX2RRDpiiTwrc=

Access rules:
#0
  - Action: any
  - Signer:
    - public: aeblUjUYsPlYsWzWfajZIExO2Dz5NVbX2RRDpiiTwrc=

⚠️  WARNING::  Secret or private key is critical data that should be handled
with care. Private keys are used to modify balances and it is important to
understand that anyone who has access to that key can perform sensitive
ledger operations.

We will use this Signer to create our new ledger. If you are unfamiliar with Ledger Signers, you can find out more in About Signers .

Create ledger

Now that we have a Signer, we can create a new ledger by using this Signer which will be the owner of the new ledger. The handle of the ledger used is my-rtp-ledger, you should use your own handle. For the rest of the options you can choose default values and choose your new owner Signer when prompted.

$ minka ledger create
? Handle: my-rtp-ledger
? Intent expiry threshold (minutes): 60
? Is wallet required before creating an anchor? Yes
? Is schedule policy processor enabled? No
? Is 2FA enabled? No
? Add custom data? No
? Signer: owner
? Signer password for owner [hidden]


Ledger summary:
---------------------------------------------------------------------------
Handle: my-rtp-ledger

Intent expiry threshold (minutes): 60
Access strategy: policy-based
Wallet required before creating an anchor: Enabled


⚠️  When a new ledger instance is created,
the server also creates a dedicated signer for that instance.
It's used to sign internal operations when needed.

The signer's public key and its encoding format
will be published so clients can verify
signatures produced by the instance.


? Sign this ledger instance using signer owner? Yes
? Set 'my-rtp-ledger' as an active ledger? Yes
? Apply layout to 'my-rtp-ledger'? No

✅ Ledger instance created successfully:
Handle: my-rtp-ledger

Intent expiry threshold (minutes): 60
Access strategy: policy-based
Wallet required before creating an anchor: Enabled

Status: created

Luid: $ldg.-0wL8gzJq8FXyT9mO
Handle: owner
Public: aeblUjUYsPlYsWzWfajZIExO2Dz5NVbX2RRDpiiTwrc=

⚠️  This ledger has been created with policy-based access strategy.
    The signer owner (aeblUjUYsPlYsWzWfajZIExO2Dz5NVbX2RRDpiiTwrc=) has full access to this ledger.
    Please, check out the default access policies created for this instance, update them or create new ones if needed.

Logged in as owner

Log in to ledger

If you followed the steps above carefully, you should already be logged in to the correct ledger. If you need to change ledgers, you can do that by doing:

$ minka ledger select
? Handle: my-rtp-ledger

Active ledger:
---------------------------------------------------------------------------
Handle: my-rtp-ledger

Intent expiry threshold (minutes): 60
Access strategy: policy-based
Wallet required before creating an anchor: Enabled
Schedule policy processor: Enabled

Status: created

If you are not logged in, you can do that by running the following command:

$ minka ledger login
! Remote signers not available.
? Signer: owner
? Signer password for owner [hidden]

✅ Logged in as owner.

Running the RTP Setup layout

Now that we have a ledger set up, we can run the RTP Setup layout:

$ minka layout apply
? Select layout: RTP Setup
? List of symbols, separated by comma (,): usd
? Select main signer: owner
? Signer password for owner [hidden]

✅ Layout applied successfully:
Ledger: my-rtp-ledger
Layout: RTP Setup
Layout changelog:
  Schema
    + person (added)
    + bank (added)
    + transfer (added)
    + issue (added)
    + destroy (added)
    + topup (added)
    + withdraw (added)
    + billing (added)
    + reconciliation (added)
    + export-changes (added)
    + export-journal (added)
    + service (added)
    + bridge (added)
    + bank-wallet (added)
    + ach-wallet (added)
    + tel-alias (added)
  Circle
    + owner (added)
    + admin (added)
    + security (added)
    + operation (added)
    + support (added)
  Policy
    + studio-navigation (added)
    + owner (added)
    + admin (added)
    + security (added)
    + operation (added)
    + support (added)
    + reporting-bridge (added)
    + schema-read-to-everyone (added)
    + global-symbols-read-to-everyone (added)
    + global-system-signer (added)
    + intent-create-read-to-participants (added)
    + intent-proof-create-to-participants (added)
    + account-anchor-crud-to-everyone (added)
    + tel-alias-wallet-crud-to-everyone (added)
    + ledger-read-to-all-signers (added)
    + report-status (added)
    + preferred-anchor-per-wallet-symbol (added)
    + rtp-bank-domain (added)
  Symbol
    + usd (added)
  Wallet
    + ach (added)
  Ledger
    o my-rtp-ledger (changed)
    o my-rtp-ledger (changed)

Running the Studio Setup layout

We will now set up Studio by running the Studio Setup layout:

$ minka layout apply
? Select layout: Studio Setup
? Owner email: email@company.com
? Invitation message: Welcome!
? Member first name: First
? Member first last name: Last
? Member second name: undefined
? Member second last name: undefined
? List of circles to assign to owner, separated by comma (,): owner
? Studio public key: XhsgBRqX6MsUU42KI/zZVZzf/pUnU4xWkWdtIuzy5bY=
? Studio URL: https://my-rtp-ledger.ldg-stg.one/studio
? Select main signer: owner
? Signer password for owner [hidden]

✅ Layout applied successfully:
Ledger: my-rtp-ledger
Layout: Studio Setup
Layout changelog:
  Schema
    + member (added)
    o rest (changed)
    o schedule (changed)
  Signer
    + email@company.com (added)
  Circle Members (signer => circle)
    + email@company.com => owner (added)
  Policy
    + studio (added)
    + member-status (added)
  Bridge
    + studio (added)
  Effect
    + signer-member-updated (added)
  Signer Proof
    + email@company.com (added)
  Ledger
    o my-rtp-ledger (changed)

You should get an onboarding e-mail from Studio which you should follow.

At this point you should have a ledger configured for RTP and connected to Studio.