# MultiVault

#### **`deposit`**

Mentransfer token ke Everscale.\
Bekerja untuk token asal dan alien. Persetujuan diperlukan hanya untuk deposito token alien.

```
function deposit(
        EverscaleAddress memory recipient,
        address token,
        uint amount
    ) external override nonReentrant
        tokenNotBlacklisted(token)
        initializeToken(token) onlyEmergencyDisabled
```

**Parameter:**

| Nama      | Jenis                   | Deskripsi                     |
| --------- | ----------------------- | ----------------------------- |
| recipient | EverscaleAddress memory | Penerima Everscale            |
| token     | address                 | Alamat token EVM              |
| amount    | uint                    | Jumlah token untuk ditransfer |

**Acara yang dikeluarkan:**

* Deposit

#### **`saveWithdrawNative`**

Menyimpan penarikan untuk token asal (melakukan pemeriksaan yang diperlukan mengenai token dan chain, menghitung biaya dan pencetakan.

```
function saveWithdrawNative(
        bytes memory payload,
        bytes[] memory signatures
    ) external override nonReentrant
        withdrawalNotSeenBefore(payload) onlyEmergencyDisabled
```

**Parameter:**

| Nama       | Jenis           | Deskripsi           |
| ---------- | --------------- | ------------------- |
| payload    | bytes memory    | Menarik payload     |
| signatures | bytes\[] memory | Daftar tanda tangan |

**Acara yang dikeluarkan:**

* Withdraw

#### **`saveWithdrawAlien`**

Menyimpan penarikan untuk token alien (melakukan pemeriksaan yang diperlukan mengenai token dan chain, menghitung biaya dan pencetakan.

```
function saveWithdrawAlien(
        bytes memory payload,
        bytes[] memory signatures
    )
        external
        override
        nonReentrant
        withdrawalNotSeenBefore(payload)
        onlyEmergencyDisabled
```

**Parameter:**

| Nama       | Jenis           | Deskripsi                                             |
| ---------- | --------------- | ----------------------------------------------------- |
| payload    | bytes memory    | Menarik payload (kemudian diproses ke EverscaleEvent) |
| signatures | bytes\[] memory | Daftar tanda tangan                                   |

**Acara yang dikeluarkan:**

* Withdraw

#### **`skim`**

Menyaring (menghapus) biaya multivault untuk token tertentu. Jika`skim_to_everscale` adalah benar, maka biaya akan dikirimkan ke Everscale. Jika tidak, token akan ditransfer ke alamat`governance`.

```
function skim(
        address token,
        bool skim_to_everscale
    ) external override nonReentrant onlyGovernanceOrManagement
```

**Parameter:**

| Nama                | Jenis   | Deskripsi                                                 |
| ------------------- | ------- | --------------------------------------------------------- |
| token               | address | Alamat token, bisa asal atau alien                        |
| skim\_to\_everscale | bool    | Biaya penyaringan bisa dijalankan di Everscale atau tidak |

**Acara yang dikeluarkan:**

* SkimFee

#### **`migrateAlienTokenToVault`**

Mentransfer token tertentu ke cadangan tertentu.

```
function migrateAlienTokenToVault(
        address token,
        address vault
    ) external override onlyGovernance
```

**Parameter:**

| Nama  | Jenis   | Deskripsi                                     |
| ----- | ------- | --------------------------------------------- |
| token | address | Alamat token alien                            |
| vault | address | Alamat cadangan untuk memimdahkan token alien |

**Acara yang dikeluarkan:**

* TokenMigrated

#### **`calculateMovementFee`**

Menghitung biaya untuk deposito atau penarikan.

```
function calculateMovementFee(
        uint256 amount,
        address _token,
        Fee fee
    ) public view returns (uint256)
```

**Parameter:**

| Nama    | Jenis   | Deskripsi                               |
| ------- | ------- | --------------------------------------- |
| amount  | uint256 | Jumlah token untuk didepositkan/ditarik |
| \_token | address | Alamat token                            |
| fee     | Fee     | Jenis biaya (Deposito=0, Penarikan=1)   |

**Nilai hasil:**

| Jenis   | Deskripsi                      |
| ------- | ------------------------------ |
| uint256 | Biaya untuk deposito/penarikan |

#### **`_activateToken`**

Mengaktifkan token tertentu dengan semua informasi tentangnya.

```
function _activateToken(
        address token,
        bool isNative
    ) internal
```

**Parameter:**

| Nama     | Jenis   | Deskripsi                         |
| -------- | ------- | --------------------------------- |
| token    | address | Alamat token                      |
| isNative | bool    | Benar jika asal, salah jika tidak |

**Acara yang dikeluarkan:**

* TokenActivated

#### **`_transferToEverscaleNative`**

Mengeluarkan acara NativeTransfer untuk menandakan transfer token asal ke jaringan Everscale.

```
function _transferToEverscaleNative(
        address _token,
        EverscaleAddress memory recipient,
        uint amount
    ) internal
```

**Parameter:**

| Nama      | Jenis                   | Deskripsi                     |
| --------- | ----------------------- | ----------------------------- |
| \_token   | address                 | Alamat token asal             |
| recipient | EverscaleAddress memory | Data penerima Everscale       |
| amount    | uint                    | Jumlah token untuk ditransfer |

**Acara yang dikeluarkan:**

* NativeTransfer

#### **`_transferToEverscaleAlien`**

Mengeluarkan acara AlienTransfer untuk menandakan transfer token alien ke jaringan Everscale.

```
function _transferToEverscaleAlien(
        address _token,
        EverscaleAddress memory recipient,
        uint amount
    ) internal
```

**Parameter:**

| Nama      | Jenis                   | Deskripsi                     |
| --------- | ----------------------- | ----------------------------- |
| \_token   | address                 | Alamat token alien            |
| recipient | EverscaleAddress memory | Data penerima Everscale       |
| amount    | uint                    | Jumlah token untuk ditransfer |

**Acara yang dikeluarkan:**

* AlienTransfer

#### **`_getNativeWithdrawalToken`**

Mendapatkan token asal berdasarkan parameter yang diberikan, meluncurkan dan mengaktifkannya jika belum aktif.

```
function _getNativeWithdrawalToken(
        NativeWithdrawalParams memory withdrawal
    ) internal returns (address token)
```

**Parameter:**

| Nama       | Jenis                         | Deskripsi                                                  |
| ---------- | ----------------------------- | ---------------------------------------------------------- |
| withdrawal | NativeWithdrawalParams memory | Data token penarikan asal (termasuk id workchain, alamat…) |

#### **`_deployTokenForNative`**

Meluncurkan token sebagai asal.

```
function _deployTokenForNative(
        EverscaleAddress memory native,
        TokenMeta memory meta
    ) internal returns (address token)
```

**Parameter:**

| Nama   | Jenis                   | Deskripsi                         |
| ------ | ----------------------- | --------------------------------- |
| native | EverscaleAddress memory | Data alamat Everscale             |
| meta   | TokenMeta memory        | Meta data token untuk diluncurkan |

**Nilai hasil:**

| Nama  | Jenis   | Deskripsi                     |
| ----- | ------- | ----------------------------- |
| token | address | Alamat token yang diluncurkan |

**Acara yang dikeluarkan:**

* TokenCreated

#### **`_processWithdrawEvent`**

Memproses acara penarikan dengan memverifikasi tanda tangan dan menerjemahkan acara dan memeriksa konfigurasi acara.

```
function _processWithdrawEvent(
        bytes memory payload,
        bytes[] memory signatures,
        EverscaleAddress memory configuration
    ) internal view returns (EverscaleEvent memory)
```

**Parameter:**

| Nama          | Jenis                   | Deskripsi                                                |
| ------------- | ----------------------- | -------------------------------------------------------- |
| payload       | bytes memory            | Data EverscaleEvent dituliskan ke byte                   |
| signatures    | bytes\[] memory         | Daftar tanda tangan                                      |
| configuration | EverscaleAddress memory | Data alamat Everscale yang diperlukan untuk pemeriksaaan |

**Nilai hasil:**

| Jenis          | Deskripsi                     |
| -------------- | ----------------------------- |
| EverscaleEvent | Penarikan baru EverscaleEvent |


---

# 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/multivault-section/multivault.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.
