# LM\_PC\_PaymentRouter\_v1.sol

[Git Source](https://github.com/InverterNetwork/inverter-contracts/blob/649b450f02fc8b735c128ff0821467e71966c666/src/modules/logicModule/LM_PC_PaymentRouter_v1.sol)

**Inherits:** ILM\_PC\_PaymentRouter\_v1, ERC20PaymentClientBase\_v1

**Author:** Inverter Network

This module enables pushing payments directly to the Payment Processor.

*Extends {ERC20PaymentClientBase\_v1} to integrate payment processing with bounty management, supporting dynamic additions, updates, and the locking of bounties. Utilizes roles for managing permissions and maintaining robust control over bounty operations.*

### State Variables

#### PAYMENT\_PUSHER\_ROLE

*The role that allows the pushing of payments.*

```solidity
bytes32 public constant PAYMENT_PUSHER_ROLE = "PAYMENT_PUSHER";
```

### Functions

#### supportsInterface

*See {IERC165-supportsInterface}.*

```solidity
function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC20PaymentClientBase_v1)
    returns (bool);
```

#### init

```solidity
function init(
    IOrchestrator_v1 orchestrator_,
    Metadata memory metadata,
    bytes memory configData
) external override(Module_v1) initializer;
```

#### pushPayment

Adds a new Payment Order.

*Reverts if an argument invalid.*

```solidity
function pushPayment(
    address recipient,
    address paymentToken,
    uint amount,
    uint start,
    uint cliff,
    uint end
) public onlyModuleRole(PAYMENT_PUSHER_ROLE);
```

**Parameters**

| Name           | Type      | Description                                             |
| -------------- | --------- | ------------------------------------------------------- |
| `recipient`    | `address` | The address that will receive the payment.              |
| `paymentToken` | `address` | The token in which to pay.                              |
| `amount`       | `uint256` | The amount of tokens the payment consists of.           |
| `start`        | `uint256` | The timestamp at which the payment SHOULD be fulfilled. |
| `cliff`        | `uint256` | The duration of the payment cliff.                      |
| `end`          | `uint256` | The timestamp at which the payment SHOULD be fulfilled. |

#### pushPaymentBatched

Adds multiple Payment Orders in one batch. These PaymentOrders will share start, cliff and end timestamps.

*Reverts if an argument invalid. The number of orders to be added in one batch is capped at 255.*

```solidity
function pushPaymentBatched(
    uint8 numOfOrders,
    address[] calldata recipients,
    address[] calldata paymentTokens,
    uint[] calldata amounts,
    uint start,
    uint cliff,
    uint end
) public onlyModuleRole(PAYMENT_PUSHER_ROLE);
```

**Parameters**

| Name            | Type        | Description                                               |
| --------------- | ----------- | --------------------------------------------------------- |
| `numOfOrders`   | `uint8`     | The number of orders to add.                              |
| `recipients`    | `address[]` | The addresses that will receive the payments.             |
| `paymentTokens` | `address[]` | The tokens in which to pay.                               |
| `amounts`       | `uint256[]` | The amounts of tokens the payments consist of.            |
| `start`         | `uint256`   | The timestamp at which the payments should start.         |
| `cliff`         | `uint256`   | The duration of the payment cliff.                        |
| `end`           | `uint256`   | The timestamps at which the payments SHOULD be fulfilled. |


---

# 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://docs.inverter.network/contracts/technical-reference/modules/logic-module/lm_pc_paymentrouter_v1.sol.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.
