> For the complete documentation index, see [llms.txt](https://docs.belugas.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.belugas.io/atokens/mint.md).

# Mint

The mint function transfers an asset into the protocol, which begins accumulating interest based on the current [Supply Rate](/atokens/supply-rate.md) for the asset. The user receives a quantity of bTokens equal to the underlying tokens supplied, divided by the current [Exchange Rate](/atokens/exchange-rate.md).

**BErc20**

```
function mint(uint mintAmount) returns (uint)
```

* `msg.sender`: The account which shall supply the asset, and own the minted bTokens.
* `mintAmount`: The amount of the asset to be supplied, in units of the underlying asset.
* `RETURN`: 0 on success, otherwise an [Error code](/atokens/error-codes.md)

Before supplying an asset, users must first [approve](https://eips.ethereum.org/EIPS/eip-20#approve) the bToken to access their token balance.

**CEther**

```
function mint() payable
```

* `msg.value` *\[payable]*: The amount of ether to be supplied, in wei.
* `msg.sender`: The account which shall supply the ether, and own the minted bTokens.
* `RETURN`: No return, reverts on error.

**Solidity**

```
Erc20 underlying = Erc20(0xToken...);     // get a handle for the underlying asset contract
BErc20 bToken = BErc20(0x3FDA...);        // get a handle for the corresponding bToken contract
underlying.approve(address(bToken), 100); // approve the transfer
assert(bToken.mint(100) == 0);            // mint the bTokens and assert there is no error
```

**Web3 1.0**

```javascript
const bToken = CEther.at(0x3FDB...);
await bToken.methods.mint().send({from: myAccount, value: 50});
```
