# Amounts, Values, and Brands
# Amounts
Amounts describe digital assets. There are no amount API methods.
Instead, an amount has two properties, value and brand with methods
that act on them or take them as arguments.
Use the AmountMath API
to get information about and otherwise manipulate an amount as a whole.
AmountMath.make() is generally how you make new amounts.
However, you can also make an amount as an object literal by making a record of
a brand and a value. While AmountMath.make() is recommended for proper
object-oriented programming, this produces the same result:
const newAmount = { brand: quatloosBrand, value: 5n };amount has two properties:
- Brand: The kind of digital asset, such as our imaginary
Quatlooscurrency or, in a game, a powerful magic sword with a brand ofPlus3Sword-ABCGamesor similar. - Value: How much/many of the asset. Fungible values are natural numbers represented as BigInts. Non-fungible values may be represented as strings naming a particular right, or an arbitrary object representing the rights at issue (e.g., a theatre ticket's date, time, row and seat positions).
amounts and their values and brands can be manipulated by the
AmountMath library. It executes the logic of how amounts change when
digital assets are merged, separated, or otherwise manipulated. For
example, you make an offer for something, which is declined. You want
to change your offer, represented as an amount, to be of a greater
value by adding to it.
# Brands
A brand object is an amount object's kind of digital asset, such as
our imaginary Quatloos currency or, in a game, a powerful magic
sword.
In ERTP, mint objects create new asset payment
objects. Each mint has a one-to-one relationship with an issuer
object. And each issuer object has a one-to-one
relationship with a brand object. This means:
- A
mintcan only create apaymentfor one specificbrand, which must be the samebrandas their associatedissuer. - An
issuercan only create a new emptypursefor one specificbrand. - An
amountis either fungible or non-fungible, as determined by which itsissuer, and thus itsbrand, was created to be.
A brand has three associated methods. The following is a brief description
and example of each brand method. For more detail, click the method's name
to go to its entry in the ERTP
API Reference.
brand.isMyIssuer(issuer)- Returns
trueif theissuerargument matches theissuerassociated with thebrand. We have this method because theissueris authoritative and thebrandis not. You can create apayment,purse, oramountwith abrandthat claims a particularissuer, without thatissuerhaving been involved. But if you use thatpaymentorpurse, it won't be accepted by genuine ones. So to know, you have to verify with theissuerto see if it agrees. const isIssuer = brand.isMyIssuer(issuer);
- Returns
brand.getAllegedName()- Returns the
brand's alleged name, but should not be trusted as accurate. const name = brand.getAllegedName();
- Returns the
brand.getDisplayInfo()- Returns the
DisplayInfoassociated with thebrand. TheDisplayInfo tells the UI how to correctly displayvaluesassociated with thebrand`. const myDisplayInfo = brand.getDisplayInfo();
- Returns the
The following methods on other ERTP components also either operate on or
return a brand.
issuer.getBrand()- Returns the
brandfor theissuer. Thebrandis not closely held, so this should not be trusted to identify anissueralone. Fake digital assets andamounts can use thebrandof anotherissuer. const myBrand = quatloosIssuer.getBrand(); // myBrand === quatloosBrand
- Returns the
payment.getAllegedBrand()- Return the
payment's allegedbrand. Because apaymentis not trusted, this should be treated with suspicion and verified elsewhere. This example code determines if apaymentwe got from untrusted sources is valid. It uses thebrandto find apursewe want to deposit it in, then verifies that it's genuine. const allegedBrand = payment.getAllegedBrand(); const probablyAppropriatePurse = brandToPurse.get(allegedBrand); const depositAmount = probablyAppropriatePurse.deposit(payment);
- Return the
# Values
Values are the "how many" part of an amount.
Note that number values (for fungible assets) are represented as BigInts and
not Numbers. Write 10n rather than 10.
There are no value
methods, but two AmountMath methods use or return them.
AmountMath.getValue(brand, amount)- Return the
amountargument'svalue const quatloos123 = AmountMath.make(quatloosBrand, 123n); // returns 123 const value = AmountMath.getValue(quatloosBrand, quatloos123);
- Return the
AmountMath.make(brand, allegedValue)- Make an
amountfrom abrandand avalue. const quatloos837 = AmountMath.make(quatloosBrand, 837n);
- Make an
← ERTP Guide AmountMath →