---
# System prepended metadata

title: METL Transaction Logging Requirements

---

# METL Transaction Logging Requirements


## ADMIN INTERFACE

### Update ROLE Transactions

This is for each of Burners, Freezers, Minters, and Pausers. 
Role update transactions contain a ROLE, ADDRESS, and either GRANT or REVOKE status. 

```
CREATE TABLE roleTransactions (
    transaction_id serial PRIMARY KEY,
    role VARCHAR ( 8 ) NOT NULL, // which role is being updated
    type VARCHAR ( 6 ) NOT NULL, // ADD or REMOVE
    name VARCHAR (50), // the user's name
    address VARCHAR ( 42 ) NOT NULL, // the user's wallet address
    user VARCHAR (42) NOT NULL, // The transaction performer's address
    created_on TIMESTAMP NOT NULL,
);
```

Example JSON Payloads
```
{
role: "MINTER",
type: "REMOVE",
address: "0xf1093dBAD29144880743FB98ea7b936F3aeADCf2",
user: "0xBc4A2b0B65e39bAE9bedad1798B824EAf0A60639"
}

{
role: "FREEZER",
type: "ADD",
name: "Mackenzie",
address: "0xBc4A2b0B65e39bAE9bedad1798B824EAf0A60639",
user: "0xf1093dBAD29144880743FB98ea7b936F3aeADCf2"
}
```

### Update Pool Transactions

Pool transactions either ADD or REMOVE an ADDRESS.

```
CREATE TABLE poolTransactions (
    transaction_id serial PRIMARY KEY,
    type VARCHAR ( 6 ) NOT NULL, // ADD or REMOVE
    name VARCHAR (50), // the bank's name
    address VARCHAR ( 42 ) NOT NULL, // the bank's multisig pool
    user VARCHAR (42) NOT NULL, // The transaction performer's address
    created_on TIMESTAMP NOT NULL,
);
```

Tech note: Adding and Removing BANK ADDRESSES are technically the same operation as GRANTING or REVOKING roles. They can be combined to the roleTransactions table, but I'm requesting a separation of concerns. 

## BURNER INTERFACE

### BURN Transactions

Burn transactions contain a BURN_TARGET and an AMOUNT.

```
CREATE TABLE burnTransactions (
    transaction_id serial PRIMARY KEY,
    address VARCHAR ( 42 ) NOT NULL, // the BURN_TARGET (will be a bank)
    amount INTEGER NOT NULL, // the AMOUNT
    user VARCHAR (42) NOT NULL, // The transaction performer's address
    created_on TIMESTAMP NOT NULL,
);
```

## MINTER INTERFACE

### MINT Transactions

Mint transactions contain a MINT_TARGET and an AMOUNT.

```
CREATE TABLE mintTransactions (
    transaction_id serial PRIMARY KEY,
    address VARCHAR ( 42 ) NOT NULL, // the MINT_TARGET (will be a bank)
    amount INTEGER NOT NULL, // the AMOUNT
    user VARCHAR (42) NOT NULL, // The transaction performer's address
    created_on TIMESTAMP NOT NULL,
);
```

Note: Mint and Burn transactions are very similar. They can be combined with an additional TYPE field to save space if you so choose. Eg:

```
CREATE TABLE bankTransactions (
    transaction_id serial PRIMARY KEY,
    address VARCHAR ( 42 ) NOT NULL, // the MINT_TARGET or BURN_TARGET (will be a bank)
    amount INTEGER NOT NULL, // the AMOUNT
    type VARCHAR (4) NOT NULL, // MINT or BURN
    user VARCHAR (42) NOT NULL, // The transaction performer's address
    created_on TIMESTAMP NOT NULL,
)
```

## FREEZER INTERFACE

### FREEZE Transactions

Freeze transactions contain an ADDRESS and TYPE because users may be FROZEN or UNFROZEN.

```
CREATE TABLE freezeTransactions (
    transaction_id serial PRIMARY KEY,
    address VARCHAR ( 42 ) NOT NULL, // the ADDRESS (can be any user)
    type VARCHAR ( 8 ) NOT NULL, // FROZEN or UNFROZEN
    user VARCHAR (42) NOT NULL, // The transaction performer's address
    created_on TIMESTAMP NOT NULL,
);
```

Note: FROZEN users are blocked from TRANSFERRING FUNDS. They are not blocked from having their ROLE updated.

## PAUSER INTERFACE

### PAUSE Transactions

Pause transactions only have a TYPE, PAUSE or UNPAUSE.

```
CREATE TABLE pauseTransactions (
    transaction_id serial PRIMARY KEY,
    type VARCHAR ( 7 ) NOT NULL, // PAUSE or UNPAUSE
    user VARCHAR (42) NOT NULL, // The transaction performer's address
    created_on TIMESTAMP NOT NULL,
);
```


