# Cadangan

#### **`deposit`**

Mendepositokan`token` ke Cadangan, yang menghasilkan token yang sesuai di sisi Everscale.

```
function deposit(
        EverscaleAddress memory recipient,
        uint256 amount
    ) public override onlyEmergencyDisabled
        respectDepositLimit(amount) nonReentrant
```

**Parameter:**

| Nama      | Jenis                   | Deskripsi                      |
| --------- | ----------------------- | ------------------------------ |
| recipient | EverscaleAddress memory | Penerima di jaringan Everscale |
| amount    | uint256                 | Jumlah token yang akan disetor |

**Acara yang dikeluarkan:**

* UserDeposit

#### **`deposit`**

Sama dengan `deposit`biasa, tetapi mengisi beberapa penarikan tertunda.

```
function deposit(
        EverscaleAddress memory recipient,
        uint256 amount,
        uint256 expectedMinBounty,
        PendingWithdrawalId[] memory pendingWithdrawalIds
    ) external override
```

**Parameter:**

| Nama                 | Jenis                         | Deskripsi                               |
| -------------------- | ----------------------------- | --------------------------------------- |
| recipient            | EverscaleAddress memory       | Penerima di jaringan Everscale          |
| amount               | uint256                       | Jumlah token yang akan disetor          |
| expectedMinBounty    | uint256                       | Jumlah bounty minimal yang diharapkan   |
| pendingWithdrawalIds | PendingWithdrawalId\[] memory | Daftar penarikan tertunda untuk ditutup |

**Acara yang dikeluarkan:**

* UserDeposit

#### **`depositToFactory`**

Menyetorkan token ke Pabrik.

```
function depositToFactory(
        uint128 amount,
        int8 wid,
        uint256 user,
        uint256 creditor,
        uint256 recipient,
        uint128 tokenAmount,
        uint128 tonAmount,
        uint8 swapType,
        uint128 slippageNumerator,
        uint128 slippageDenominator,
        bytes memory level3
    ) external override onlyEmergencyDisabled respectDepositLimit(amount)
```

**Parameter:**

| Nama                | Jenis        | Deskripsi                                                |
| ------------------- | ------------ | -------------------------------------------------------- |
| amount              | uint128      | Jumlah yang harus disetor                                |
| wid                 | int8         | Id workchain                                             |
| user                | uint256      | Alamat pengguna                                          |
| creditor            | uint256      | Alamat kreditor                                          |
| recipient           | uint256      | Alamat penerima                                          |
| tokenAmount         | uint128      | Jumlah token                                             |
| tonAmount           | uint128      | Jumlah ton                                               |
| swapType            | uint8        | Jenis penghapusan                                        |
| slippageNumerator   | uint128      | Numerator yang digunakan dalam menentukan nilai slippage |
| slippageDenominator | uint128      | Penyebut yang digunakan dalam menentukan nilai slippage  |
| level3              | bytes memory |                                                          |

**Acara yang dikeluarkan:**

* FactoryDeposit

#### **`saveWithdraw`**

Menyimpan tanda terima penarikan. Jika Cadangan memiliki cukup token dan penarikan melewati batas, maka Cadangan akan segera dieksekusi. Jika tidak, disimpan sebagai penarikan tertunda.

```
function saveWithdraw(
        bytes memory payload,
        bytes[] memory signatures
    )  public override onlyEmergencyDisabled
        withdrawalNotSeenBefore(payload)
        returns (bool instantWithdrawal, PendingWithdrawalId memory pendingWithdrawalId)
```

**Parameter:**

| Nama       | Jenis           | Deskripsi                                                       |
| ---------- | --------------- | --------------------------------------------------------------- |
| payload    | bytes memory    | Tanda terima penarikan, byte yang dikodekan dari EverscaleEvent |
| signatures | bytes\[] memory | Daftar tanda tangan pengganti                                   |

**Nilai hasil:**

| Nama                | Jenis                      | Deskripsi                                                                            |
| ------------------- | -------------------------- | ------------------------------------------------------------------------------------ |
| instantWithdrawal   | bool                       | Benar jika penarikan langsung terisi, salah jika disimpan sebagai penarikan tertunda |
| pendingWithdrawalId | PendingWithdrawalId memory | Id penarikan tertunda                                                                |

**Acara yang dikeluarkan:**

* InstantWithdrawal

#### **`saveWithdraw`**

Menyimpan bukti penarikan, sama dengan `saveWithdraw(bytes payload, bytes[] signatures)`, tetapi mengizinkan untuk langsung mengatur bounty.

```
function saveWithdraw(
        bytes memory payload,
        bytes[] memory signatures,
        uint bounty
    )
        external
        override
```

**Parameter:**

| Nama       | Jenis           | Deskripsi                                                       |
| ---------- | --------------- | --------------------------------------------------------------- |
| payload    | bytes memory    | Tanda terima penarikan, byte yang dikodekan dari EverscaleEvent |
| signatures | bytes\[] memory | Daftar tanda tangan pengganti                                   |
| bounty     | uint            | Nilai baru untuk bounty penarikan yang tertunda                 |

#### **`cancelPendingWithdrawal`**

Membatalkan penarikan tertunda sebagian atau seluruhnya. Hanya dapat dipanggil oleh penerima penarikan yang tertunda.

```
function cancelPendingWithdrawal(
        uint256 id,
        uint256 amount,
        EverscaleAddress memory recipient,
        uint bounty
    ) external override onlyEmergencyDisabled
        pendingWithdrawalApproved(PendingWithdrawalId(msg.sender, id))
        pendingWithdrawalOpened(PendingWithdrawalId(msg.sender, id))
```

**Parameter:**

| Nama      | Jenis                   | Deskripsi                                                         |
| --------- | ----------------------- | ----------------------------------------------------------------- |
| id        | uint256                 | Id penarikan tertunda                                             |
| amount    | uint256                 | Jumlah yang akan dibatalkan (lalu jumlah penarikan yang tertunda) |
| recipient | EverscaleAddress memory | Penerima token di jaringan Everscale                              |
| bounty    | uint                    | Nilai bounty baru                                                 |

**Acara yang dikeluarkan:**

* PendingWithdrawalCancel

#### **`withdraw`**

Menarik penarikan tertunda akun panggilan dari Cadangan ini.

```
function withdraw(
        uint256 id,
        uint256 amountRequested,
        address recipient,
        uint256 maxLoss,
        uint256 bounty
    ) external override onlyEmergencyDisabled
        pendingWithdrawalOpened(PendingWithdrawalId(msg.sender, id))
        pendingWithdrawalApproved(PendingWithdrawalId(msg.sender, id))
        returns(uint256 amountAdjusted)
```

**Parameter:**

| Nama            | Jenis   | Deskripsi                                             |
| --------------- | ------- | ----------------------------------------------------- |
| id              | uint256 | Id penarikan tertunda                                 |
| amountRequested | uint256 | Jumlah token yang akan ditarik                        |
| recipient       | address | Alamat untuk mengirim token tebusan                   |
| maxLoss         | uint256 | Kerugian maksimum yang dapat diterima untuk penarikan |
| bounty          | uint256 | Nilai bounty baru                                     |

**Nilai hasil:**

| Nama           | Jenis   | Deskripsi                    |
| -------------- | ------- | ---------------------------- |
| amountAdjusted | uint256 | Jumlah token yang ditukarkan |

**Acara yang dikeluarkan:**

* PendingWithdrawalWithdraw

#### **`addStrategy`**

Menambahkan Strategi ke Cadangan. Hanya bisa dipanggil dengan`governance`.

```
function addStrategy(
        address strategyId,
        uint256 _debtRatio,
        uint256 minDebtPerHarvest,
        uint256 maxDebtPerHarvest,
        uint256 _performanceFee
    ) external  override onlyGovernance
        onlyEmergencyDisabled strategyNotExists(strategyId)
```

**Parameter:**

| Nama              | Jenis   | Deskripsi                                                               |
| ----------------- | ------- | ----------------------------------------------------------------------- |
| strategyId        | address | Alamat strategi untuk menambahkan                                       |
| \_debtRatio       | uint256 | Bagian dari total aset cadangan yang dapat diakses oleh strategi        |
| minDebtPerHarvest | uint256 | Batas bawah peningkatan utang sejak panen terakhir                      |
| maxDebtPerHarvest | uint256 | Batas atas peningkatan utang sejak panen terakhir                       |
| \_performanceFee  | uint256 | Biaya yang akan diterima ahli strategi berdasarkan kinerja Cadangan ini |

**Acara yang dikeluarkan:**

* StrategyAdded

#### **`updateStrategyDebtRatio`**

Mengganti kuantitas aset yang boleh dikelola `strategy`. Bisa dipanggil oleh`governance` atau `management`.

```
function updateStrategyDebtRatio(
        address strategyId,
        uint256 _debtRatio
    ) external  override onlyGovernanceOrManagement
        strategyExists(strategyId)
```

**Parameter:**

| Nama        | Jenis   | Deskripsi                                                |
| ----------- | ------- | -------------------------------------------------------- |
| strategyId  | address | Alamat strategi untuk memperbarui                        |
| \_debtRatio | uint256 | Kuantitas strategi aset dapat dikelola setelah pembaruan |

**Acara yang dikeluarkan:**

* StrategyUpdateDebtRatio

#### **`updateStrategyMinDebtPerHarvest`**

Memperbarui strategi utang minimal dengan nilai baru yang diteruskan dari param.

```
function updateStrategyMinDebtPerHarvest(
        address strategyId,
        uint256 minDebtPerHarvest
    ) external override onlyGovernanceOrManagement
        strategyExists(strategyId)
```

**Parameter:**

| Nama              | Jenis   | Deskripsi                                          |
| ----------------- | ------- | -------------------------------------------------- |
| strategyId        | address | Alamat strategi untuk memperbarui                  |
| minDebtPerHarvest | uint256 | Batas bawah peningkatan utang sejak panen terakhir |

**Acara yang dikeluarkan:**

* StrategyUpdateMinDebtPerHarvest

#### **`updateStrategyMaxDebtPerHarvest`**

Memperbarui strategi hutang maksimum dengan nilai baru yang diteruskan dari param.

```
function updateStrategyMaxDebtPerHarvest(
        address strategyId,
        uint256 maxDebtPerHarvest
    ) external override onlyGovernanceOrManagement
        strategyExists(strategyId)
```

**Parameter:**

| Nama              | Jenis   | Deskripsi                                         |
| ----------------- | ------- | ------------------------------------------------- |
| strategyId        | address | Alamat strategi untuk memperbarui                 |
| maxDebtPerHarvest | uint256 | Batas atas peningkatan utang sejak panen terakhir |

**Acara yang dikeluarkan:**

* StrategyUpdateMaxDebtPerHarvest

#### **`updateStrategyPerformanceFee`**

Memperbarui biaya kinerja strategi dengan nilai baru yang diteruskan dari param.

```
function updateStrategyPerformanceFee(
        address strategyId,
        uint256 _performanceFee
    ) external override onlyGovernance strategyExists(strategyId)
```

**Parameter:**

| Nama             | Jenis   | Deskripsi                                                                    |
| ---------------- | ------- | ---------------------------------------------------------------------------- |
| strategyId       | address | Alamat strategi untuk memperbarui                                            |
| \_performanceFee | uint256 | Biaya baru yang akan diterima ahli strategi berdasarkan kinerja Cadangan ini |

**Acara yang dikeluarkan:**

* StrategyUpdatePerformanceFee

#### **`revokeStrategy`**

Membatalkan strategi.

```
function revokeStrategy(
        address strategyId
    ) external override onlyStrategyOrGovernanceOrGuardian(strategyId)
```

**Parameter:**

| Nama       | Jenis   | Deskripsi                         |
| ---------- | ------- | --------------------------------- |
| strategyId | address | Alamat strategi untuk memperbarui |

**Acara yang dikeluarkan:**

* StrategyRevoked

#### **`_assessFees`**

Berdasarkan id strategi dan keuntungan yang dilaporkan, menghitung total biaya berdasarkan perkiraan biaya manajemen, ahli strategi, dan kinerja.

```
function _assessFees(
        address strategyId,
        uint256 gain
    ) internal returns (uint256)
```

**Parameter:**

| Nama       | Jenis   | Deskripsi                                                |
| ---------- | ------- | -------------------------------------------------------- |
| strategyId | address | Alamat strategi untuk memperbarui                        |
| gain       | uint256 | Keuntungan yang dilaporkan digunakan untuk menilai biaya |

**Nilai hasil:**

| Jenis   | Deskripsi               |
| ------- | ----------------------- |
| uint256 | Biaya baru yang dinilai |

#### **`report`**

Melaporkan jumlah aset yang dimiliki Strategi panggilan gratis (biasanya dalam hal ROI).

```
function report(
        uint256 gain,
        uint256 loss,
        uint256 _debtPayment
    )
        external
        override
        strategyExists(msg.sender)
        returns (uint256)
```

**Parameter:**

| Nama          | Jenis   | Deskripsi                                                                                        |
| ------------- | ------- | ------------------------------------------------------------------------------------------------ |
| gain          | uint256 | Strategi jumlah telah direalisasikan sebagai keuntungan atas investasinya sejak laporan terakhir |
| loss          | uint256 | Strategi jumlah telah direalisasikan sebagai kerugian atas investasinya sejak laporan terakhir   |
| \_debtPayment | uint256 | Strategi jumlah telah tersedia untuk menutupi hutang yang belum dibayar                          |

**Nilai hasil:**

| Jenis   | Deskripsi                        |
| ------- | -------------------------------- |
| uint256 | Jumlah hutang yang belum dibayar |

**Acara yang dikeluarkan:**

* StrategyReported

#### **`skim`**

Menyaring keuntungan strategi ke alamat `rewards_`. Hanya bisa dipanggil oleh `governance` atau `management`.

```
function skim(
        address strategyId
    ) external  override onlyGovernanceOrManagement
        strategyExists(strategyId)
```

**Parameter:**

| Nama       | Jenis   | Deskripsi                         |
| ---------- | ------- | --------------------------------- |
| strategyId | address | Alamat strategi untuk memperbarui |

#### **`skimFees`**

Menyaring biaya Cadangan ke alamat `rewards_`. Hanya bisa dipanggil oleh `governance` atau `management`.

```
function skimFees(
        bool skim_to_everscale
    ) external override onlyGovernanceOrManagement
```

**Parameter:**

| Nama                | Jenis | Deskripsi                                                 |
| ------------------- | ----- | --------------------------------------------------------- |
| skim\_to\_everscale | bool  | Benar jika menyaring biaya ke Everscale, salah jika tidak |

#### **`sweep`**

Menghapus token dari Cadangan ini yang bukan jenis token yang dikelola oleh Cadangan ini. Ini dapat digunakan jika tidak sengaja mengirim jenis token yang salah ke Cadangan ini.

```
function sweep(
        address _token
    ) external override onlyGovernance
```

**Parameter:**

| Nama    | Jenis   | Deskripsi                                              |
| ------- | ------- | ------------------------------------------------------ |
| \_token | address | Alamat token untuk ditransfer keluar dari cadangan ini |

#### **`forceWithdraw`**

Memaksa penarikan tertunda pengguna. Hanya berfungsi jika Cadangan memiliki cukup token di saldonya. Hanya dapat dipanggil dengan wrapped.

```
function forceWithdraw(
        PendingWithdrawalId memory pendingWithdrawalId
    )
        public
        override
        onlyEmergencyDisabled
        pendingWithdrawalOpened(pendingWithdrawalId)
        pendingWithdrawalApproved(pendingWithdrawalId)
```

**Parameter:**

| Nama                | Jenis                      | Deskripsi             |
| ------------------- | -------------------------- | --------------------- |
| pendingWithdrawalId | PendingWithdrawalId memory | Id penarikan tertunda |

**Acara yang dikeluarkan:** PendingWithdrawalForce

#### **`forceWithdraw`**

Multicall untuk`forceWithdraw`.

```
function forceWithdraw(
        PendingWithdrawalId[] memory pendingWithdrawalId
    ) external override
```

**Parameter:**

| Nama                | Jenis                         | Deskripsi             |
| ------------------- | ----------------------------- | --------------------- |
| pendingWithdrawalId | PendingWithdrawalId\[] memory | Id penarikan tertunda |

#### **`setPendingWithdrawalApprove`**

Menetapkan status persetujuan untuk penarikan yang tertunda. Penarikan tertunda harus dalam status persetujuan `Required` (1), jadi status persetujuan hanya dapat diatur satu kali. Jika Cadangan memiliki cukup token di saldonya - penarikan akan segera diisi. Hanya bisa dipanggil dengan`governance` atau`withdrawGuardian`.

**Acara yang dikeluarkan:**

* PendingWithdrawalWithdraw

```
function setPendingWithdrawalApprove(
        PendingWithdrawalId memory pendingWithdrawalId,
        ApproveStatus approveStatus
    ) public override onlyGovernanceOrWithdrawGuardian
        pendingWithdrawalOpened(pendingWithdrawalId)
```

#### **`setPendingWithdrawalApprove`**

Multicall untuk`setPendingWithdrawalApprove`.

```
function setPendingWithdrawalApprove(
        PendingWithdrawalId[] memory pendingWithdrawalId,
        ApproveStatus[] memory approveStatus
    ) external override
```

**Parameter:**

| Nama                | Jenis                         | Deskripsi                                        |
| ------------------- | ----------------------------- | ------------------------------------------------ |
| pendingWithdrawalId | PendingWithdrawalId\[] memory | Id penarikan tertunda                            |
| approveStatus       | ApproveStatus\[] memory       | Status persetujuan, harus Disetujui atau Ditolak |

#### **`_transferToEverscale`**

Mengeluarkan acara untuk memberi tahu transfer yang berhasil.

```
function _transferToEverscale(EverscaleAddress memory recipient,uint256 _amount) internal
```

**Parameter:**

| Nama      | Jenis                   | Deskripsi                    |
| --------- | ----------------------- | ---------------------------- |
| recipient | EverscaleAddress memory | Alamat penerima di Everscale |
| \_amount  | uint256                 | Jumlah yang akan ditransfer  |

**Acara yang dikeluarkan:**

* Deposit


---

# 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.octusbridge.io/ob-id/integrate/octus-bridge-contracts/ethereum/vault-section/vault.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.
