# ERTP Introduction
The Agoric platform is at the beta stage. It is in the process of being formally evaluated for vulnerabilities, and is undergoing security treatment and hardening to support mainnet-1 launch. Do not use for production purposes.
ERTP uses object capabilities to enforce access control. If your program has a reference to an object, it can call methods on that object. If it doesn't have a reference, it can't.
# Creating assets with ERTP
In ERTP, mints create digital assets. Access to an asset's
mint lets you create more digital assets of that kind. You can then
store new assets in a payment or a purse.
Payments: Assets you intend to move between
pursesor to other destinations.
Purses: Store assets until you withdraw them into a payment for use
To send assets in ERTP:
- Withdraw them from a
purse. This creates a
- Send this
paymentto a recipient object as a message.
To receive assets in ERTP:
- Create a
pursefor the asset kind you'll receive. Note: You do not need access to the kind's
mintto do this.
- Receive the message with the
paymentand deposit the
# Security properties
purse has a
deposit method which takes a
as its argument. It first checks that the
genuine and the same asset kind as the
purse (any individual
payment can only hold one kind of asset, which is set on
their creation. So a
purse might hold Quatloos, meaning it couldn't
hold Moola or any other non-Quatloo asset). Note: Quatloos and Moola are both
If everything passes the checks, the assets move from the
purse. If there's a problem, it throws an error.
After a successful deposit, ERTP guarantees:
paymentis consumed and unavailable for later use.
pursecontains the total of what it held before plus the
payment's full content.
- For example, deposit of a 3 Quatloos
pursethat already has 7 Quatloos updates the purse's balance to 10 Quatloos.
- For example, deposit of a 3 Quatloos
deposit() call throws an error (something goes wrong),
- The alleged
paymentis in the same state as before the call.
purseis in the same state as before the call.
In other words, a failed attempt to deposit a 3 Quatloo
in a 7 Quatloo
purse means the
payment continues to exist and hold
3 Quatloos, and the
purse continues to hold 7 Quatloos.
# Issuers and mints
Other key ERTP components are:
Mints: Make new digital assets as a new
Mintsonly make one kind of asset (these can be currencies, objects for use in games, property rights, etc. In these docs, we use an imaginary currency, Quatloos, for our examples). We refer to that kind as a
mint's Brand. So if a
mintissues Quatloos, it's a Quatloo
mintscan issue new digital assets. To mint new assets of a particular kind, you must have a reference to that kind's
Issuers: Create empty
pursesand manipulate and operate on
Issuersverify and move digital assets and are the authority on contents of
pursesusing their brand.
issuer's special admin facet is a
Mint, and that
have a one-to-one relationship. With a reference to an
Issuer, you can
check the validity of a
payment in that
i.e. If you have a reference to the Quatloos
issuer, you can validate
payment made in Quatloos. You can also claim the
as a new
payment to yourself or a
purse you control.
Issuers should be obtained from a trusted source
and then relied upon as the decider of whether an untrusted
Note: There is a one-to-one correspondence between a
mint, and an
issuer. In other words:
mintassociated with a Quatloos
brandcan only create new Quatloos and is the only
mintthat can create new Quatloos.
issuerassociated with a Quatloos
mintcan only operate on Quatloos asset holders. It is the only
issuerthat can operate on them.
Amounts describe digital assets without having any value of their own. Anyone can make one, and they can be sent freely to anyone since they convey no underlying value. They have two parts:
- Brand: An unforgeable object identity for the digital asset's kind, such as an object that represents Quatloos.
- Value: How much/many of the asset. Fungible
valuesare natural numbers and represented as
valuesare strings or objects representing attributes of the asset (say, a theater ticket's row and seat positions).
Note: fungible means any item in a set can be used. For example, for change for a dollar, any four quarters work. Non-fungible means specific items in a set must be used. For example, theater tickets are not all the same, and it matters if you get third row center or second balcony far left (and affects what you're willing to trade for it).
Issuers must be able to deposit and withdraw assets from a
requires being able to add and subtract digital assets. They use a set
In addition to math operations,
AmountMath functions check on their
brands, throwing an error if the wrong
brand was used.
AmountMath only works on assets of their associated
There can be many copies of the
AmountMath for a particular
# Next Steps
If you are Getting Started, you should go to the Introduction to Zoe.
If you've finished the Getting Started material, you should go to the ERTP Guide for a fuller explanation of ERTP concepts, including ones not covered in this Introduction.