# UserData

#### **`propose`**

Jika pengguna memiliki cukup bensin dan tidak dipotong, meluncurkan pengajuan baru ke root dao, jika tidak memberi tahu pengguna bahwa pengajuan tidak dibuat.

```
function propose(
        TvmCell proposal_data,
        uint128 threshold
    ) override public onlyDaoRoot
```

**Parameter:**

| Nama           | Jenis   | Deskripsi                                                                        |
| -------------- | ------- | -------------------------------------------------------------------------------- |
| proposal\_data | TvmCell | Data pengajuan dalam format sel yang diperlukan untuk meluncurkan pengajuan baru |
| threshold      | uint128 | Jumlah token minimum yang diperlukan untuk mengajukan                            |

#### **`onProposalDeployed`**

Menambahkan pengajuan ke pengajuan yang dibuat, menghapus pengajuan yang tertunda dan memberi tahu pengguna bahwa pengajuan telah dibuat.

```
function onProposalDeployed(uint32 nonce, uint32 proposal_id, uint32 answer_id) public override onlyDaoRoot
```

**Parameter:**

| Nama         | Jenis  | Deskripsi                |
| ------------ | ------ | ------------------------ |
| nonce        | uint32 | Id pengajuan sementara   |
| proposal\_id | uint32 | Id pengajuan yang dibuat |
| answer\_id   | uint32 |                          |

#### **`castVote`**

Jika ada kesalahan memberi tahu pengguna jika suara ditolak, jika tidak menambahkan suara yang dikeluarkan ke suara yang masuk dan suara yang masuk ke pengajuan dengan id yang diberikan.

```
function castVote(uint32 code_version, uint32 proposal_id, bool support, string reason) public override onlyRoot
```

**Parameter:**

| Nama          | Jenis  | Deskripsi                                                  |
| ------------- | ------ | ---------------------------------------------------------- |
| code\_version | uint32 | Versi kode saat ini                                        |
| proposal\_id  | uint32 | Id pengajuan di mana pengguna memberikan suara             |
| support       | bool   | Benar jika suara mendukung pengajuan, salah jika menentang |
| reason        | string | Alasan suara yang diputuskan                               |

**Acara yang dikeluarkan:**

* VoteCast

#### **`voteCasted`**

Memberi tahu pengguna bahwa suara diberikan.

```
function voteCasted(uint32 proposal_id) override public onlyDaoProposal(proposal_id)
```

**Parameter:**

| Nama         | Jenis  | Deskripsi                                       |
| ------------ | ------ | ----------------------------------------------- |
| proposal\_id | uint32 | Id pengajuan di mana suara pengguna dikeluarkan |

#### **`rejectVote`**

Menghapus suara dari suara yang diberikan dan memberi tahu pengguna tentang penolakan.

```
function rejectVote(uint32 proposal_id) override public onlyDaoProposal(proposal_id)
```

**Parameter:**

| Nama         | Jenis  | Deskripsi                                   |
| ------------ | ------ | ------------------------------------------- |
| proposal\_id | uint32 | Id pengajuan di mana suara pengguna ditolak |

#### **`tryUnlockVoteTokens`**

Membuka token yang digunakan untuk pemilihan.

```
function tryUnlockVoteTokens(uint32 code_version, uint32 proposal_id) override public view onlyRoot
```

**Parameter:**

| Nama          | Jenis  | Deskripsi                                |
| ------------- | ------ | ---------------------------------------- |
| code\_version | uint32 | Versi kode saat ini                      |
| proposal\_id  | uint32 | Id pengajuan di mana token suara terbuka |

#### **`unlockVoteTokens`**

Menghapus pengajuan yang dibuat dan membuka suara pengguna.

```
function unlockVoteTokens(uint32 proposal_id, bool success) override public onlyDaoProposal(proposal_id)
```

**Parameter:**

| Nama         | Jenis  | Deskripsi                                         |
| ------------ | ------ | ------------------------------------------------- |
| proposal\_id | uint32 | Id pengajuan di mana token suara harus dibuka     |
| success      | bool   | Benar jika pengajuan diterima, salah jika ditolak |

**Acara yang dikeluarkan:**

* UnlockVotes

#### **`tryUnlockCastedVotes`**

Membuka suara yang dikeluarkan dari pengajuan dan mentransfer sisa bensin ke pengguna.

```
function tryUnlockCastedVotes(uint32 code_version, uint32[] proposal_ids) override public view onlyRoot
```

**Parameter:**

| Nama          | Jenis     | Deskripsi                                                |
| ------------- | --------- | -------------------------------------------------------- |
| code\_version | uint32    | Versi kode saat ini                                      |
| proposal\_ids | uint32\[] | Id pengajuan di mana suara yang dikeluarkan harus dibuka |

#### **`unlockCastedVote`**

Menghapus suara yang dikeluarkan dari daftar dan memberi tahu pengguna bahwa suara terbuka.

```
function unlockCastedVote(uint32 proposal_id, bool success) override public onlyDaoProposal(proposal_id)
```

**Parameter:**

| Nama         | Jenis  | Deskripsi                                         |
| ------------ | ------ | ------------------------------------------------- |
| proposal\_id | uint32 | Id pengajuan di mana pengguna mengeluarkan suara  |
| success      | bool   | Benar jika pengajuan diterima, salah jika ditolak |

**Acara yang dikeluarkan:**

* UnlockCastedVotes

#### **`_lockedTokens`**

Mengembalikan jumlah total token pengguna yang terkunci yang digunakan di pengajuan

```
function _lockedTokens() private view returns (uint128)
```

Nilai hasil:

| Jenis   | Deskripsi                                 |
| ------- | ----------------------------------------- |
| uint128 | Jumlah total token pengguna yang terkunci |

#### **`syncRewards`**

Mensinkronkan semua data yang terhubung ke putaran hadiah saat menambahkan putaran hadiah baru.

```
function syncRewards(IStakingPool.RewardRound[] reward_rounds, uint256 updated_balance) internal
```

**Parameter:**

| Nama             | Jenis                       | Deskripsi                                |
| ---------------- | --------------------------- | ---------------------------------------- |
| reward\_rounds   | IStakingPool.RewardRound\[] | Daftar hadiah putaran                    |
| updated\_balance | uint256                     | Memperbarui saldo token setelah tindakan |

#### **`slash`**

Mensinkronkan hadiah, mengatur hadiah yang terblokir, hutang hadiah dan saldo token dan mengonfirmasi pemotongan dengan menggunakan data itu.

```
function slash(IStakingPool.RewardRound[] reward_rounds, address send_gas_to) external override onlyRoot
```

**Parameter:**

| Nama           | Jenis          | Deskripsi                            |
| -------------- | -------------- | ------------------------------------ |
| reward\_rounds | RewardRound\[] | Daftar hadiah putaran                |
| send\_gas\_to  | address        | Alamat untuk mengirimkan sisa bensin |

#### **`processDeposit`**

Mensinkronkan hadiah, menambahkan token yang didepositokan ke saldo token dan menyelesaikan deposito.

```
function processDeposit(
        uint64 nonce,
        uint128 _tokens_to_deposit,
        IStakingPool.RewardRound[] reward_rounds,
        uint32 code_version
    ) external override onlyRoot
```

**Parameter:**

| Nama                  | Jenis          | Deskripsi                                             |
| --------------------- | -------------- | ----------------------------------------------------- |
| nonce                 | uint64         | Id deposito yang harus dikembalikan atau diselesaikan |
| \_tokens\_to\_deposit | uint128        | Jumlah token untuk didepositokan                      |
| reward\_rounds        | RewardRound\[] | Daftar hadiah putaran                                 |
| code\_version         | uint32         | Versi kode saat ini                                   |

**Acara yang dikeluarkan:**

* DepositProcessed

#### **`processClaimReward`**

Mensinkronkan hadiah, membuat daftar hadiah baru yang datanya adalah saldo hadiah dari putaran hadiah masing-masing dan menyelesaikan mengklaim hadiah.

```
function processClaimReward(
        IStakingPool.RewardRound[] reward_rounds,
        address send_gas_to,
        uint32 code_version
    ) external override onlyRoot
```

**Parameter:**

| Nama           | Jenis          | Deskripsi                            |
| -------------- | -------------- | ------------------------------------ |
| reward\_rounds | RewardRound\[] | Daftar hadiah putaran                |
| send\_gas\_to  | address        | Alamat untuk mengirimkan sisa bensin |
| code\_version  | uint32         | Versi kode saat ini                  |

#### **`getRewardForRelayRound`**

Melakukan semua pemeriksaan yang diperlukan dan mendapatkan hadiah untuk putaran pengganti yang selesai.

```
function getRewardForRelayRound(uint32 round_num) external onlyRelay
```

**Parameter:**

| Nama       | Jenis  | Deskripsi      |
| ---------- | ------ | -------------- |
| round\_num | uint32 | Jumlah putaran |

#### **`processGetRewardForRelayRound2`**

Mensinkronkan hadiah dan berdasarkan alamat putaran pengganti yang ditemukan menggunakan angka putaran mendapatkan hadiah untuk putaran berikut.

```
function processGetRewardForRelayRound2(
        IStakingPool.RewardRound[] reward_rounds,
        uint32 round_num,
        uint32 code_version,
        uint32 relay_round_code_version
    ) external override onlyRoot
```

**Parameter:**

| Nama                        | Jenis          | Deskripsi                    |
| --------------------------- | -------------- | ---------------------------- |
| reward\_rounds              | RewardRound\[] | Daftar hadiah putaran        |
| round\_num                  | uint32         | Jumlah putaran               |
| code\_version               | uint32         | Versi kode saat ini          |
| relay\_round\_code\_version | uint32         | Versi kode putaran pengganti |

#### **`receiveRewardForRelayRound`**

Meningkatkan saldo hadiah untuk putaran tertentu.

```
function receiveRewardForRelayRound(
        uint32 relay_round_num, uint32 reward_round_num, uint128 reward
    ) external override onlyRelayRound(relay_round_num)
```

**Parameter:**

| Nama               | Jenis   | Deskripsi                              |
| ------------------ | ------- | -------------------------------------- |
| relay\_round\_num  | uint32  | Jumlah putaran pengganti               |
| reward\_round\_num | uint32  | Jumlah hadiah putaran                  |
| reward             | uint128 | Jumlah untuk meningkatkan saldo hadiah |

**Acara yang dikeluarkan:**

* RelayRoundRewardClaimed

#### **`processLinkRelayAccounts`**

Menautkan akun pengganti dengan mengatur relay\_ton\_pubkey dan relay\_eth\_address

```
function processLinkRelayAccounts(
        uint256 ton_pubkey,
        uint160 eth_address,
        bool confirm,
        uint32 code_version
    ) external override onlyRoot
```

**Parameter:**

| Nama          | Jenis   | Deskripsi                                                        |
| ------------- | ------- | ---------------------------------------------------------------- |
| ton\_pubkey   | uint256 | Kunci umum akun ton                                              |
| eth\_address  | uint160 | Alamat akun ethereum                                             |
| confirm       | bool    | Benar jika kedua akun ton and eth terkonfirmasi, saah jika tidak |
| code\_version | uint32  | Versi kode saat ini                                              |

**Acara yang dikeluarkan:**

* RelayKeysUpdated
* TonPubkeyConfirmed
* EthAddressConfirmed

#### **`confirmTonAccount`**

Mengatur ton\_pubkey\_confirmed ke benar.

```
function confirmTonAccount() external
```

**Acara yang dikeluarkan:**

* TonPubkeyConfirmed

#### **`processConfirmEthAccount`**

Mengatur eth\_address\_confirmed ke benar dan mentransfer sisa bensin ke send\_gas\_to.

```
function processConfirmEthAccount(uint160 eth_address, address send_gas_to) external override onlyRoot
```

**Parameter:**

| Nama          | Jenis   | Deskripsi                            |
| ------------- | ------- | ------------------------------------ |
| eth\_address  | uint160 | Alamat akun ethereum                 |
| send\_gas\_to | address | Alamat untuk mengirimkan sisa bensin |

**Acara yang dikeluarkan:**

* EthAddressConfirmed

#### **`becomeRelayNextRound`**

Memproses pengganti untuk putaran berikutnya di pool taruhan.

```
function becomeRelayNextRound() external onlyRelay
```

#### **`processBecomeRelayNextRound2`**

Berdasarkan alamat pemilihan mengajukan keanggotaan.

```
function processBecomeRelayNextRound2(
        uint32 round_num,
        uint32 lock_time,
        uint128 min_deposit,
        uint32 code_version,
        uint32 election_code_version
    ) external override onlyRoot
```

**Parameter:**

| Nama                    | Jenis   | Deskripsi                         |
| ----------------------- | ------- | --------------------------------- |
| round\_num              | uint32  | Jumlah putaran                    |
| lock\_time              | uint32  | Durasi penguncian token           |
| min\_deposit            | uint128 | Jumlah minimal deposito pengganti |
| code\_version           | uint32  | Versi kode saat ini               |
| election\_code\_version | uint32  | Versi kode pemilihan              |

#### **`relayMembershipRequestAccepted`**

Mengunci pengganti selama 30 hari.

```
function relayMembershipRequestAccepted(
        uint32 round_num, uint128 tokens, uint256 ton_pubkey, uint160 eth_addr, uint32 lock_time
    ) external override onlyElection(round_num)
```

**Parameter:**

| Nama        | Jenis   | Deskripsi               |
| ----------- | ------- | ----------------------- |
| round\_num  | uint32  | Jumlah putaran          |
| tokens      | uint128 |                         |
| ton\_pubkey | uint256 | Kunci umum akun ton     |
| eth\_addr   | uint160 | Alamat akun ethereum    |
| lock\_time  | uint32  | Durasi penguncian token |

**Acara yang dikeluarkan:**

* RelayMembershipRequested

#### **`processWithdraw`**

Mensinkronkan hadiah, mengurangi jumlah saldo token untuk menarik dan menyelesaikan penarikan di pool taruhan.

```
function processWithdraw(
        uint128 _tokens_to_withdraw,
        IStakingPool.RewardRound[] reward_rounds,
        bool emergency,
        address send_gas_to,
        uint32 code_version
    ) external override onlyRoot
```

**Parameter:**

| Nama                   | Jenis          | Deskripsi                                      |
| ---------------------- | -------------- | ---------------------------------------------- |
| \_tokens\_to\_withdraw | uint128        | Jumlah token untuk ditarik                     |
| reward\_rounds         | RewardRound\[] | Daftar hadiah putaran                          |
| emergency              | bool           | Benar jika penarikan darurat, salah jika tidak |
| send\_gas\_to          | address        | Alamat untuk mengirimkan sisa bensin           |
| code\_version          | uint32         | Versi kode saat ini                            |

#### **`withdrawTons`**

Mentransfer ke pengguna semua sisa ton.

```
function withdrawTons() external override onlyRoot
```
