# MagnifyCashV1

### [State Variables](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#state-variables) <a href="#state-variables" id="state-variables"></a>

#### [lendingDeskIdCounter](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdeskidcounter) <a href="#lendingdeskidcounter" id="lendingdeskidcounter"></a>

Unique identifier for lending desks

```solidity
uint256 public lendingDeskIdCounter;
```

#### [loanIdCounter](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanidcounter) <a href="#loanidcounter" id="loanidcounter"></a>

Unique identifier for loans

```solidity
uint256 public loanIdCounter;
```

#### [lendingDesks](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdesks) <a href="#lendingdesks" id="lendingdesks"></a>

Mapping to store lending desks

```solidity
mapping(uint256 => LendingDesk) public lendingDesks;
```

#### [lendingDeskLoanConfigs](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdeskloanconfigs) <a href="#lendingdeskloanconfigs" id="lendingdeskloanconfigs"></a>

Mapping to store loan configs of lending desks

```solidity
mapping(uint256 => mapping(address => LoanConfig)) public lendingDeskLoanConfigs;
```

#### [loans](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loans) <a href="#loans" id="loans"></a>

Mapping to store loans

```solidity
mapping(uint256 => Loan) public loans;
```

#### [obligationNotes](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#obligationnotes) <a href="#obligationnotes" id="obligationnotes"></a>

The address of the ERC721 to generate obligation notes for borrowers

```solidity
address public immutable obligationNotes;
```

#### [lendingKeys](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingkeys) <a href="#lendingkeys" id="lendingkeys"></a>

The address of the lending desk ownership ERC721

```solidity
address public immutable lendingKeys;
```

#### [loanOriginationFee](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanoriginationfee) <a href="#loanoriginationfee" id="loanoriginationfee"></a>

The basis points of fees that the borrower will pay for each loan

```solidity
uint256 public loanOriginationFee;
```

#### [platformWallet](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#platformwallet) <a href="#platformwallet" id="platformwallet"></a>

The address of the platform wallet

```solidity
address public platformWallet;
```

### [Functions](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#functions) <a href="#functions" id="functions"></a>

#### [constructor](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#constructor) <a href="#constructor" id="constructor"></a>

```solidity
constructor(
    address _obligationNotes,
    address _lendingKeys,
    uint256 _loanOriginationFee,
    address _platformWallet,
    address _initialOwner
);
```

#### [initializeNewLendingDesk](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#initializenewlendingdesk) <a href="#initializenewlendingdesk" id="initializenewlendingdesk"></a>

Creates a new lending desk

*Emits an {NewLendingDeskInitialized} event.*

```solidity
function initializeNewLendingDesk(address _erc20, uint256 _depositAmount, LoanConfig[] calldata _loanConfigs)
    external
    whenNotPaused;
```

**Parameters**

| Name             | Type           | Description                                                        |
| ---------------- | -------------- | ------------------------------------------------------------------ |
| `_erc20`         | `address`      | The ERC20 that will be accepted for loans in this lending desk     |
| `_depositAmount` | `uint256`      | The initial balance of this lending desk                           |
| `_loanConfigs`   | `LoanConfig[]` | Loan config for each NFT collection this lending desk will support |

#### [setLendingDeskLoanConfigs](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#setlendingdeskloanconfigs) <a href="#setlendingdeskloanconfigs" id="setlendingdeskloanconfigs"></a>

Creates a new lending configuration

*Emits an {LendingDeskLoanConfigsSet} event.*

```solidity
function setLendingDeskLoanConfigs(uint256 _lendingDeskId, LoanConfig[] calldata _loanConfigs) public whenNotPaused;
```

**Parameters**

| Name             | Type           | Description                                                        |
| ---------------- | -------------- | ------------------------------------------------------------------ |
| `_lendingDeskId` | `uint256`      | Identifier for the lending desk                                    |
| `_loanConfigs`   | `LoanConfig[]` | Loan config for each NFT collection this lending desk will support |

#### [\_setLendingDeskLoanConfigs](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#_setlendingdeskloanconfigs) <a href="#setlendingdeskloanconfigs" id="setlendingdeskloanconfigs"></a>

```solidity
function _setLendingDeskLoanConfigs(uint256 _lendingDeskId, LoanConfig[] calldata _loanConfigs) internal;
```

#### [removeLendingDeskLoanConfig](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#removelendingdeskloanconfig) <a href="#removelendingdeskloanconfig" id="removelendingdeskloanconfig"></a>

Removes a new lending configuration

*Emits an {LendingDeskLoanConfigsSet} event.*

```solidity
function removeLendingDeskLoanConfig(uint256 _lendingDeskId, address _nftCollection) external whenNotPaused;
```

**Parameters**

| Name             | Type      | Description                                                   |
| ---------------- | --------- | ------------------------------------------------------------- |
| `_lendingDeskId` | `uint256` | Identifier for the lending desk                               |
| `_nftCollection` | `address` | Address for the NFT collection to remove supported config for |

#### [depositLendingDeskLiquidity](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#depositlendingdeskliquidity) <a href="#depositlendingdeskliquidity" id="depositlendingdeskliquidity"></a>

This function is called to add liquidity to a lending desk

*Emits an {LendingDeskLiquidityDeposited} event.*

```solidity
function depositLendingDeskLiquidity(uint256 _lendingDeskId, uint256 _amount) public whenNotPaused;
```

**Parameters**

| Name             | Type      | Description                   |
| ---------------- | --------- | ----------------------------- |
| `_lendingDeskId` | `uint256` | The id of the lending desk    |
| `_amount`        | `uint256` | The balance to be transferred |

#### [\_depositLendingDeskLiquidity](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#_depositlendingdeskliquidity) <a href="#depositlendingdeskliquidity" id="depositlendingdeskliquidity"></a>

```solidity
function _depositLendingDeskLiquidity(uint256 _lendingDeskId, uint256 _amount) internal;
```

#### [withdrawLendingDeskLiquidity](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#withdrawlendingdeskliquidity) <a href="#withdrawlendingdeskliquidity" id="withdrawlendingdeskliquidity"></a>

This function is called to cash out a lending desk

*Emits an {LendingDeskLiquidityWithdrawn} event.*

```solidity
function withdrawLendingDeskLiquidity(uint256 _lendingDeskId, uint256 _amount) external;
```

**Parameters**

| Name             | Type      | Description                              |
| ---------------- | --------- | ---------------------------------------- |
| `_lendingDeskId` | `uint256` | The id of the lending desk to be cashout |
| `_amount`        | `uint256` | Amount to withdraw from the lending desk |

#### [setLendingDeskState](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#setlendingdeskstate) <a href="#setlendingdeskstate" id="setlendingdeskstate"></a>

This function can be called by the lending desk owner in order to freeze it

*Emits an {LendingDeskStateSet} event.*

```solidity
function setLendingDeskState(uint256 _lendingDeskId, bool _freeze) external whenNotPaused;
```

**Parameters**

| Name             | Type      | Description                         |
| ---------------- | --------- | ----------------------------------- |
| `_lendingDeskId` | `uint256` | ID of the lending desk to be frozen |
| `_freeze`        | `bool`    | Whether to freeze or unfreeze       |

#### [initializeNewLoan](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#initializenewloan) <a href="#initializenewloan" id="initializenewloan"></a>

This function can be called by a borrower to create a loan

*Emits an {NewLoanInitialized} event*

```solidity
function initializeNewLoan(
    uint64 _lendingDeskId,
    address _nftCollection,
    uint64 _nftId,
    uint32 _duration,
    uint256 _amount,
    uint32 _maxInterestAllowed
) external whenNotPaused;
```

**Parameters**

| Name                  | Type      | Description                                         |
| --------------------- | --------- | --------------------------------------------------- |
| `_lendingDeskId`      | `uint64`  | ID of the lending desk related to this offer        |
| `_nftCollection`      | `address` | The NFT collection address to be used as collateral |
| `_nftId`              | `uint64`  | ID of the NFT to be used as collateral              |
| `_duration`           | `uint32`  | Loan duration in hours                              |
| `_amount`             | `uint256` | Amount to ask on this loan in ERC20                 |
| `_maxInterestAllowed` | `uint32`  |                                                     |

#### [getLoanAmountDue](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#getloanamountdue) <a href="#getloanamountdue" id="getloanamountdue"></a>

This function can be called by anyone to get the remaining due amount of a loan

```solidity
function getLoanAmountDue(uint256 _loanId) public view returns (uint256 amount);
```

**Parameters**

| Name      | Type      | Description    |
| --------- | --------- | -------------- |
| `_loanId` | `uint256` | ID of the loan |

#### [makeLoanPayment](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#makeloanpayment) <a href="#makeloanpayment" id="makeloanpayment"></a>

This function can be called by the obligation note holder to pay a loan and get the collateral back

*Emits an {LoanPaymentMade} event.*

```solidity
function makeLoanPayment(uint256 _loanId, uint256 _amount, bool _resolve) external;
```

**Parameters**

| Name       | Type      | Description                                                       |
| ---------- | --------- | ----------------------------------------------------------------- |
| `_loanId`  | `uint256` | ID of the loan                                                    |
| `_amount`  | `uint256` | The amount to be paid, in erc20 tokens                            |
| `_resolve` | `bool`    | Whether to resolve the loan or not. If true, \_amount is ignored. |

#### [liquidateDefaultedLoan](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#liquidatedefaultedloan) <a href="#liquidatedefaultedloan" id="liquidatedefaultedloan"></a>

This function is called by the lending desk key owner in order to liquidate a loan and claim the NFT collateral

*Emits an {LiquidatedOverdueLoan} event.*

```solidity
function liquidateDefaultedLoan(uint256 _loanId) external;
```

**Parameters**

| Name      | Type      | Description    |
| --------- | --------- | -------------- |
| `_loanId` | `uint256` | ID of the loan |

#### [setLoanOriginationFee](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#setloanoriginationfee) <a href="#setloanoriginationfee" id="setloanoriginationfee"></a>

Allows the admin of the contract to modify loan origination fee.

*Emits an {LoanOriginationFeeSet} event.*

```solidity
function setLoanOriginationFee(uint256 _loanOriginationFee) public onlyOwner;
```

**Parameters**

| Name                  | Type      | Description                                                                        |
| --------------------- | --------- | ---------------------------------------------------------------------------------- |
| `_loanOriginationFee` | `uint256` | Basis points fee the borrower will have to pay to the platform when borrowing loan |

#### [setPlatformWallet](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#setplatformwallet) <a href="#setplatformwallet" id="setplatformwallet"></a>

Allows the admin of the contract to set the platform wallet where platform fees will be sent to

*Emits an {PlatformWalletSet} event.*

```solidity
function setPlatformWallet(address _platformWallet) public onlyOwner;
```

**Parameters**

| Name              | Type      | Description                                |
| ----------------- | --------- | ------------------------------------------ |
| `_platformWallet` | `address` | Wallet where platform fees will be sent to |

#### [setPaused](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#setpaused) <a href="#setpaused" id="setpaused"></a>

Allows the admin of the contract to pause the contract as an emergency response.

*Emits either a {Paused} or {Unpaused} event.*

```solidity
function setPaused(bool _paused) external onlyOwner;
```

**Parameters**

| Name      | Type   | Description                 |
| --------- | ------ | --------------------------- |
| `_paused` | `bool` | Whether to pause or unpause |

### [Events](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#events) <a href="#events" id="events"></a>

#### [NewLendingDeskInitialized](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#newlendingdeskinitialized) <a href="#newlendingdeskinitialized" id="newlendingdeskinitialized"></a>

Event that will be emitted every time a lending desk is created

```solidity
event NewLendingDeskInitialized(
    uint256 lendingDeskId, address owner, address erc20, uint256 initialBalance, LoanConfig[] loanConfigs
);
```

#### [LendingDeskLoanConfigsSet](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdeskloanconfigsset) <a href="#lendingdeskloanconfigsset" id="lendingdeskloanconfigsset"></a>

Event that will be emitted every time a lending desk config is created

```solidity
event LendingDeskLoanConfigsSet(uint256 lendingDeskId, LoanConfig[] loanConfigs);
```

#### [LendingDeskLoanConfigRemoved](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdeskloanconfigremoved) <a href="#lendingdeskloanconfigremoved" id="lendingdeskloanconfigremoved"></a>

Event that will be emitted every time a lending desk config is removed

```solidity
event LendingDeskLoanConfigRemoved(uint256 lendingDeskId, address nftCollection);
```

#### [LendingDeskLiquidityDeposited](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdeskliquiditydeposited) <a href="#lendingdeskliquiditydeposited" id="lendingdeskliquiditydeposited"></a>

Event that will be emitted every time liquidity is added to a lending desk

```solidity
event LendingDeskLiquidityDeposited(uint256 lendingDeskId, uint256 amountDeposited);
```

#### [LendingDeskLiquidityWithdrawn](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdeskliquiditywithdrawn) <a href="#lendingdeskliquiditywithdrawn" id="lendingdeskliquiditywithdrawn"></a>

Event that will be emitted every time there is a cash out on a lending desk

```solidity
event LendingDeskLiquidityWithdrawn(uint256 lendingDeskId, uint256 amountWithdrawn);
```

#### [LendingDeskStateSet](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdeskstateset) <a href="#lendingdeskstateset" id="lendingdeskstateset"></a>

Event that will be emitted every time a lending desk is frozen// unfrozen

```solidity
event LendingDeskStateSet(uint256 lendingDeskId, bool freeze);
```

#### [NewLoanInitialized](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#newloaninitialized) <a href="#newloaninitialized" id="newloaninitialized"></a>

Event that will be emitted every time a new offer is accepted

```solidity
event NewLoanInitialized(
    uint256 lendingDeskId,
    uint256 loanId,
    address borrower,
    address nftCollection,
    uint256 nftId,
    uint256 amount,
    uint256 duration,
    uint256 interest,
    uint256 platformFee
);
```

#### [LoanPaymentMade](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanpaymentmade) <a href="#loanpaymentmade" id="loanpaymentmade"></a>

Event that will be emitted every time a borrower pays back a loan

```solidity
event LoanPaymentMade(uint256 loanId, uint256 amountPaid, bool resolved);
```

#### [DefaultedLoanLiquidated](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#defaultedloanliquidated) <a href="#defaultedloanliquidated" id="defaultedloanliquidated"></a>

Event that will be emitted every time a loan is liquidated when the obligation note holder did not pay it back in time

```solidity
event DefaultedLoanLiquidated(uint256 loanId);
```

#### [ProtocolInitialized](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#protocolinitialized) <a href="#protocolinitialized" id="protocolinitialized"></a>

Event that will be when the contract is deployed

```solidity
event ProtocolInitialized(address obligationNotes, address lendingKeys);
```

#### [LoanOriginationFeeSet](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanoriginationfeeset) <a href="#loanoriginationfeeset" id="loanoriginationfeeset"></a>

Event that will be emitted every time an admin updates loan origination fee

```solidity
event LoanOriginationFeeSet(uint256 loanOriginationFee);
```

#### [PlatformWalletSet](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#platformwalletset) <a href="#platformwalletset" id="platformwalletset"></a>

Event that will be emitted every time an admin updates the platform wallet

```solidity
event PlatformWalletSet(address platformWallet);
```

### [Errors](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#errors) <a href="#errors" id="errors"></a>

#### [ObligationNotesIsZeroAddr](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#obligationnotesiszeroaddr) <a href="#obligationnotesiszeroaddr" id="obligationnotesiszeroaddr"></a>

```solidity
error ObligationNotesIsZeroAddr();
```

#### [LendingKeysIsZeroAddr](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingkeysiszeroaddr) <a href="#lendingkeysiszeroaddr" id="lendingkeysiszeroaddr"></a>

```solidity
error LendingKeysIsZeroAddr();
```

#### [ERC20IsZeroAddr](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#erc20iszeroaddr) <a href="#erc20iszeroaddr" id="erc20iszeroaddr"></a>

```solidity
error ERC20IsZeroAddr();
```

#### [InvalidLendingDeskId](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#invalidlendingdeskid) <a href="#invalidlendingdeskid" id="invalidlendingdeskid"></a>

```solidity
error InvalidLendingDeskId();
```

#### [CallerIsNotLendingDeskOwner](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#callerisnotlendingdeskowner) <a href="#callerisnotlendingdeskowner" id="callerisnotlendingdeskowner"></a>

```solidity
error CallerIsNotLendingDeskOwner();
```

#### [MinAmountIsZero](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#minamountiszero) <a href="#minamountiszero" id="minamountiszero"></a>

```solidity
error MinAmountIsZero();
```

#### [MaxAmountIsLessThanMin](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#maxamountislessthanmin) <a href="#maxamountislessthanmin" id="maxamountislessthanmin"></a>

```solidity
error MaxAmountIsLessThanMin();
```

#### [MinInterestIsZero](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#mininterestiszero) <a href="#mininterestiszero" id="mininterestiszero"></a>

```solidity
error MinInterestIsZero();
```

#### [MaxInterestIsLessThanMin](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#maxinterestislessthanmin) <a href="#maxinterestislessthanmin" id="maxinterestislessthanmin"></a>

```solidity
error MaxInterestIsLessThanMin();
```

#### [MinDurationIsZero](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#mindurationiszero) <a href="#mindurationiszero" id="mindurationiszero"></a>

```solidity
error MinDurationIsZero();
```

#### [MaxDurationIsLessThanMin](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#maxdurationislessthanmin) <a href="#maxdurationislessthanmin" id="maxdurationislessthanmin"></a>

```solidity
error MaxDurationIsLessThanMin();
```

#### [InvalidInterest](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#invalidinterest) <a href="#invalidinterest" id="invalidinterest"></a>

```solidity
error InvalidInterest();
```

#### [InvalidNFTCollection](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#invalidnftcollection) <a href="#invalidnftcollection" id="invalidnftcollection"></a>

```solidity
error InvalidNFTCollection();
```

#### [LendingDeskIsNotActive](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdeskisnotactive) <a href="#lendingdeskisnotactive" id="lendingdeskisnotactive"></a>

```solidity
error LendingDeskIsNotActive();
```

#### [InsufficientLendingDeskBalance](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#insufficientlendingdeskbalance) <a href="#insufficientlendingdeskbalance" id="insufficientlendingdeskbalance"></a>

```solidity
error InsufficientLendingDeskBalance();
```

#### [UnsupportedNFTCollection](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#unsupportednftcollection) <a href="#unsupportednftcollection" id="unsupportednftcollection"></a>

```solidity
error UnsupportedNFTCollection();
```

#### [AmountIsZero](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#amountiszero) <a href="#amountiszero" id="amountiszero"></a>

```solidity
error AmountIsZero();
```

#### [LendingDeskIsNotFrozen](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdeskisnotfrozen) <a href="#lendingdeskisnotfrozen" id="lendingdeskisnotfrozen"></a>

```solidity
error LendingDeskIsNotFrozen();
```

#### [InvalidLoanId](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#invalidloanid) <a href="#invalidloanid" id="invalidloanid"></a>

```solidity
error InvalidLoanId();
```

#### [LendingDeskIsNotEmpty](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#lendingdeskisnotempty) <a href="#lendingdeskisnotempty" id="lendingdeskisnotempty"></a>

```solidity
error LendingDeskIsNotEmpty();
```

#### [LoanAmountTooLow](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanamounttoolow) <a href="#loanamounttoolow" id="loanamounttoolow"></a>

```solidity
error LoanAmountTooLow();
```

#### [LoanAmountTooHigh](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanamounttoohigh) <a href="#loanamounttoohigh" id="loanamounttoohigh"></a>

```solidity
error LoanAmountTooHigh();
```

#### [LoanDurationTooLow](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loandurationtoolow) <a href="#loandurationtoolow" id="loandurationtoolow"></a>

```solidity
error LoanDurationTooLow();
```

#### [LoanDurationTooHigh](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loandurationtoohigh) <a href="#loandurationtoohigh" id="loandurationtoohigh"></a>

```solidity
error LoanDurationTooHigh();
```

#### [LoanIsNotActive](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanisnotactive) <a href="#loanisnotactive" id="loanisnotactive"></a>

```solidity
error LoanIsNotActive();
```

#### [CallerIsNotBorrower](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#callerisnotborrower) <a href="#callerisnotborrower" id="callerisnotborrower"></a>

```solidity
error CallerIsNotBorrower();
```

#### [CallerIsNotLender](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#callerisnotlender) <a href="#callerisnotlender" id="callerisnotlender"></a>

```solidity
error CallerIsNotLender();
```

#### [LoanHasNotDefaulted](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanhasnotdefaulted) <a href="#loanhasnotdefaulted" id="loanhasnotdefaulted"></a>

```solidity
error LoanHasNotDefaulted();
```

#### [LoanHasDefaulted](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanhasdefaulted) <a href="#loanhasdefaulted" id="loanhasdefaulted"></a>

```solidity
error LoanHasDefaulted();
```

#### [PlatformWalletIsZeroAddr](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#platformwalletiszeroaddr) <a href="#platformwalletiszeroaddr" id="platformwalletiszeroaddr"></a>

```solidity
error PlatformWalletIsZeroAddr();
```

#### [LoanMustBeActiveForMin1Hour](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanmustbeactiveformin1hour) <a href="#loanmustbeactiveformin1hour" id="loanmustbeactiveformin1hour"></a>

```solidity
error LoanMustBeActiveForMin1Hour();
```

#### [LoanPaymentExceedsDebt](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#loanpaymentexceedsdebt) <a href="#loanpaymentexceedsdebt" id="loanpaymentexceedsdebt"></a>

```solidity
error LoanPaymentExceedsDebt();
```

#### [InterestRateTooHigh](https://docs.magnify.cash/contracts/contracts/MagnifyCashV1.sol/contract.MagnifyCashV1.html#interestratetoohigh) <a href="#interestratetoohigh" id="interestratetoohigh"></a>

```solidity
error InterestRateTooHigh();
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://magnify.gitbook.io/magnify.cash/contracts/magnifycashv1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
