# Monero

### Addresses

Monero addresses are structs, defined as follows:

  - `kind`:  Enum {
               Standard,
               Subaddress,
               Featured { flags: u8 }
             }
  - `spend`: [u8; 32]
  - `view`:  [u8; 32]

Integrated addresses are not supported due to only being able to send to one
per Monero transaction. Supporting them would add a level of complexity
to Serai which isn't worth it.

This definition of Featured Addresses is non-standard since the flags are
represented by a u8, not a VarInt. Currently, only half of the bits are used,
with no further planned features. Accordingly, it should be fine to fix its
size. If needed, another enum entry for a 2-byte flags Featured Address could be
added.

This definition is also non-standard by not having a Payment ID field. This is
per not supporting integrated addresses.

### In Instructions

Monero In Instructions are present via `tx.extra`, specifically via inclusion
in a `TX_EXTRA_NONCE` tag. The tag is followed by the VarInt length of its
contents, and then additionally marked by a byte `127`. The following data is
limited to 254 bytes.

### Out Instructions

Out Instructions ignore `data`.