> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monolith.market/llms.txt
> Use this file to discover all available pages before exploring further.

# Coin

> ERC20 stablecoin implementation

# Coin Contract

The Coin contract implements an ERC20 stablecoin with additional functionality for the Monolith protocol.

[Contract implementation](https://github.com/MonolithMarket/Monolith/blob/main/src/Coin.sol)

## Constructor

```solidity theme={null}
constructor(
    address _minter,
    string memory name,
    string memory symbol
)
```

Initializes the stablecoin with a designated minter address, token name, and symbol.

**Parameters:**

* `_minter`: Address authorized to mint new tokens (Lender.sol)
* `name`: ERC20 token name (e.g., "USD Coin")
* `symbol`: ERC20 token symbol (e.g., "USDC")

## User-Facing Functions

### mint

```solidity theme={null}
function mint(address to, uint256 amount) external
```

Creates new tokens and assigns them to the specified address. Can only be called by the minter (Lender.sol).

**Parameters:**

* `to`: Address to receive the minted tokens
* `amount`: Amount of tokens to mint (in wei, 18 decimals)

**Requirements:**

* `msg.sender` must be the minter address (Lender.sol).

**Events Emitted:**

* `Transfer(address(0), to, amount)`

***

### burn

```solidity theme={null}
function burn(uint256 amount) external
```

Destroys tokens from the caller's balance, reducing the total supply.

**Parameters:**

* `amount`: Amount of tokens to burn from caller's balance

**Requirements:**

* Caller must have sufficient balance (`balanceOf(msg.sender) >= amount`)

**Events Emitted:**

* `Transfer(msg.sender, address(0), amount)`

***

### transfer

```solidity theme={null}
function transfer(address to, uint256 amount) external returns (bool)
```

Standard ERC20 transfer function. Moves tokens from caller's balance to another address.

**Parameters:**

* `to`: Recipient address
* `amount`: Amount of tokens to transfer

**Returns:**

* `bool`: Always returns true on successful transfer

**Requirements:**

* Caller must have sufficient balance

**Events Emitted:**

* `Transfer(msg.sender, to, amount)`

***

### transferFrom

```solidity theme={null}
function transferFrom(address from, address to, uint256 amount) external returns (bool)
```

Standard ERC20 transferFrom function. Moves tokens from one address to another using allowance mechanism.

**Parameters:**

* `from`: Address to transfer tokens from
* `to`: Recipient address
* `amount`: Amount of tokens to transfer

**Returns:**

* `bool`: Always returns true on successful transfer

**Requirements:**

* `from` must have sufficient balance
* Caller must have sufficient allowance from `from`

**Events Emitted:**

* `Transfer(from, to, amount)`

***

### approve

```solidity theme={null}
function approve(address spender, uint256 amount) external returns (bool)
```

Standard ERC20 approve function. Allows spender to transfer up to amount tokens from caller's balance.

**Parameters:**

* `spender`: Address authorized to spend tokens
* `amount`: Maximum amount spender can transfer

**Returns:**

* `bool`: Always returns true on successful approval

**Events Emitted:**

* `Approval(msg.sender, spender, amount)`

***

## View Functions

### balanceOf

```solidity theme={null}
function balanceOf(address account) external view returns (uint256)
```

Returns the token balance of the specified address.

**Parameters:**

* `account`: Address to query balance for

**Returns:**

* `uint256`: Token balance in wei

***

### allowance

```solidity theme={null}
function allowance(address owner, address spender) external view returns (uint256)
```

Returns the remaining allowance that spender can spend on behalf of owner.

**Parameters:**

* `owner`: Address that granted the allowance
* `spender`: Address authorized to spend

**Returns:**

* `uint256`: Remaining allowance amount

***

### totalSupply

```solidity theme={null}
function totalSupply() external view returns (uint256)
```

Returns the total supply of tokens in circulation.

**Returns:**

* `uint256`: Total token supply in wei

***

### name

```solidity theme={null}
function name() external view returns (string memory)
```

Returns the name of the token.

**Returns:**

* `string`: Token name

***

### symbol

```solidity theme={null}
function symbol() external view returns (string memory)
```

Returns the symbol of the token.

**Returns:**

* `string`: Token symbol

***

### decimals

```solidity theme={null}
function decimals() external view returns (uint8)
```

Returns the number of decimals used for token amounts.

**Returns:**

* `uint8`: Number of decimals (18 for this token)

***

### minter

```solidity theme={null}
function minter() external view returns (address)
```

Returns the address authorized to mint new tokens (Lender.sol).

**Returns:**

* `address`: Minter address

## Events

### Transfer

```solidity theme={null}
event Transfer(address indexed from, address indexed to, uint256 amount)
```

Emitted when tokens are transferred, minted, or burned.

**Parameters:**

* `from`: Sender address (address(0) for mints)
* `to`: Recipient address (address(0) for burns)
* `amount`: Amount of tokens transferred

***

### Approval

```solidity theme={null}
event Approval(address indexed owner, address indexed spender, uint256 amount)
```

Emitted when allowance is set or changed.

**Parameters:**

* `owner`: Address granting the allowance
* `spender`: Address receiving the allowance
* `amount`: New allowance amount
