Architecture Overview
+------------------------------------------------------------+ +----------------------------------------------------------------+
| monetae-authority (service, CLI) | | monetae-wallet (library, CLI) |
| | | |
| "Lex Monetae" | | Wallet holds currency files and ed25519 private keys for |
| | | signing currency files. |
| “The law of money.” The law governing the printing, use, | | |
| and disposal of currency in the issuing state. | | Wallets can be implemented in local storage or a hardware |
| | | wallet. |
| Authority is responsible for delegating the issuance | | |
| and disposal of currency. | | User interfaces for the wallet can be mobile applications |
| | | or web applications. |
| Mints receive permission to create new money from the | | |
| authority. | | Wallets can hold currency files issued by |
| | | multiple authorities. |
| An authority is managed by a governing board. Each | | |
| member of the board has its own ed25519 signing key. | +--------------------------^-------------------------------------+
| | |
| Money that has been issued by a mint that has not been | +--------------------------+-------------------------------------+
| granted permission by an authority in an issuing +----+----> monetae-sdk (library, CLI) |
| state in invalid. | | | |
| | | | SDK for interacting with monetae currency files. |
| | | | |
+----------------------^-------+-----------------------------+ | +--------------------------+-------------------------------------+
| | | |
Requests permission | | Authority responds with | +--------------------------v-------------------------------------+
from an authority | | the signed public key of the | | monetae-promissory-schema (library) |
| | mint and the issuance limit | | |
| | allowed to the mint. | | The flatbuffer schema representing a monetae-promissory file. |
| | | | |
+----------------------+-------v-----------------------------+ | | Flatbuffers are a memory efficient, and light weight wire |
| monetae-mint (service, CLI) | | | format. See benchmark results: |
| | | | |
| Issues new currency files. +----+ | https://google.github.io/flatbuffers/md__benchmarks.html |
| | | | |
| Each mint has its own ed25519 signing keys. Mints are | | | Flatbuffers support SDKs for multiple programming languages, |
| delegated currency issuers. | | | enabling groups to write software for reading and writing |
| | | | monetae-promissory files in their desired language. |
| Mints receive permission programmatically from an | | | |
| authority. When a mint is granted permission, its ed25519 | | | The initial implementation of the monetae-promissory is |
| public key is kept in a registry. Each mint is given | | | written in the Rust programming language. |
| limits on the amount of currency it may issue. | | | |
| | | | The monetae-promissory-schema is semantic versioned, and is |
| A mint's ed25519 public key is signed by an authority and | | | designed to be forward and backward compatible, due to |
| is included in each currency file, such that any holder | | | flatbuffers optional design pattern. Furthermore, this design |
| of the file may check it has been issued by an authorized | | | pattern ensures the file size of the note does not become |
| mint. | | | bloated with extraneous fields. See: |
| | | | |
| Mints can check their issuance limits with an authority. | | | https://google.github.io/flatbuffers/md__schemas.html |
| Mints provide an endpoint accessible by the authority | | | |
| that returns the amount of currency issued. An authority | | | |
| uses this endpoint to check the current amounts issued by | | | |
| a mint. | | | |
| | | | |
| If a mint exceeds its limits, an authority may increase | | +----------------------------------------------------------------+
| the mint's limits, or it may restrict issuance of new | |
| currency. | | +----------------------------------------------------------------+
| | | | monetae-promissory (file) |
| Each currency file contains an issuance date which <----+----+ |
| is used to determine the validity of a currency file with | | | File representing a note issued by a mint. |
| the status of a mint. For example, if the mint's authority | | | |
| has been revoked at a certain date, any currency files | | | Example file name: |
| issued after that date (but before a reinstated date) are | | | |
| considered invalid or fraudulent. | | | |
| | | | |
| | | | USD-100-2-C3-A6-DE8F1D7B-3322-4BE9-AD61-9CB801E748C1.ae |
| | | | |
+-----------------------------+------------------------------+ | | |
| | | |
+-----------------------------v------------------------------+ | | The first three characters are the ISO-4217 currency |
| monetae-treasury (service, CLI) | | | code. |
| | | | |
| Holds domestic and foreign currency files, and provides | | | The second section, delimitted by `-`, is the amount |
| foreign exchange services. | | | represented as a unsigned integer expanded decimal format. |
| | | | |
| Treasuries may be run by authorities and other commercial | | | The third section, delimitted by `-`, is the decimal precision |
| or institutional actors. +----+ | of the amount. In the example above, the amount of the note |
| | | | is one U.S. dollar and zero cents, i.e. $1.00. |
| In the example of commercial actors, the treasury service | | | |
| may provide internal mechanisms for settling payments | | | The fourth section, delimitted by `-`, is the prefix |
| denominated in foreign amounts. | | | for monetae protocol notes, i.e. `C3-A6`. |
| | | | |
+----------------------------+-------------------------------+ | | The remainder of the file is the universally unique identifier |
| | | (UUID) of the note. This UUID is registered with both the mint,|
+----------------------------v-------------------------------+ | | and the issuing authority. The UUID is upper cased. |
| monetae-sanctions (service, CLI) | | | |
| | | | The file type of a monetae-promissory currency file is `.ae`. |
| Sanctions provides a list of public keys mapped to +----+ | |
| personal identifiable information (PII). This service | | The contents of the file is defined by the |
| is operated by the authority managing the sactions list. | | monetae-promissory-schema, a flatbuffer schema. |
| | | |
+------------------------------------------------------------+ +----------------------------------------------------------------+
Copyright (C) 2021 Emergent Financial, LLC - All Rights Reserved
This file is part of Monetae. Unauthorized copying of this file, via any medium is strictly prohibited. The file is proprietary and confidential. See LICENSE in root Monetae project repository End User License Agreement (UELA).