# Teller Interfaces

The Teller contract handles all interactions with end users and manages tokens issued to represent bond positions. Users purchase bonds by depositing Quote Tokens and receive a Bond Token (token type is implementation-specific) that represents their payout and the designated expiry. Once a bond vests, users can redeem their Bond Tokens for the underlying Payout Token. A Teller requires one or more Auctioneer contracts to be deployed to provide markets for users to purchase bonds from.

### Teller Interface

The [Teller Interface](https://github.com/Bond-Protocol/bond-contracts/blob/master/src/interfaces/IBondTeller.sol) defines the functions that all Teller contracts should implement.&#x20;

Significant functionality is left to specific implementations.&#x20;

The two Tellers implemented here both tokenize the bond positions, but this is not required. The functions Tellers must implement are:

```solidity
purchase
getFee
setProtocolFee // onlyGuardian
setReferrerFee
claimFees
```

### Fixed-Term Teller Interface

The [Fixed-Term Teller Interface](https://github.com/Bond-Protocol/bond-contracts/blob/master/src/interfaces/IBondFixedTermTeller.sol) defines the functions that should be implemented to tokenize and redeem fixed-term bond positions using ERC1155 tokens.&#x20;

The required functions are:

```solidity
deploy
create
redeem
batchRedeem
getTokenId
getTokenNameAndSymbol
```

### Fixed-Expiry Teller Interface

The [Fixed-Expiry Teller Interface](https://github.com/Bond-Protocol/bond-contracts/blob/master/src/interfaces/IBondFixedExpiryTeller.sol) defines the functions that should be implemented to tokenize and redeem fixed-maturity bond positions using ERC20 tokens. The required functions are:

```solidity
deploy
create
redeem
getBondTokenForMarket
```

The `deploy, create` and `redeem` functions are similar across each Teller that tokenizes bond positions but they differ in the arguments required and the type of token they return.
