# 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 |
