Skip to content

Commit

Permalink
New translations airdrop-claim-best-practice.mdx (Russian)
Browse files Browse the repository at this point in the history
  • Loading branch information
TonSquare committed Jan 31, 2025
1 parent afe67ed commit 8cdac18
Showing 1 changed file with 13 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@
### Дистрибьютор

Принимает доказательство от пользователя, проверяет его, выпускает жетоны.
Состояние инициализации: `(merkle_root, admin, fee_wallet_address)`.
State init: `(merkle_root, admin, fee_wallet_address)`.

### Двойная трата

Получает сообщение, возвращает в случае использования, в противном случае передает сообщение дальше.

### Jetton wallet

Кошелек Jetton, с которого токены будут отправлены _дистрибьютором_.
Jetton wallet, с которого токены будут отправлены _дистрибьютором_.
Jetton minter выходит за рамки этой статьи.

### Кошелек для комиссии
Expand All @@ -42,8 +42,8 @@ Jetton minter выходит за рамки этой статьи.
Первая структура, которая приходит на ум, что-то вроде этого:

- Пользователь отправляет доказательство дистрибьютору
- Дистрибьютор проверяет доказательство и развертывает контракт `двойной траты`
- Дистрибьютор передает сообщение о двойной трате
- Дистрибьютор проверяет доказательство и разворачивает контракт `двойной траты`
- Дистрибьютор передает сообщение контракту двойной траты
- Контракт двойной траты отправляет `claim_ok` дистрибьютору, если он не был развернут ранее
- Дистрибьютор отправляет комиссию за клейм на кошелек для оплаты комиссии
- Дистрибьютор отпускает жетоны пользователю.
Expand All @@ -57,7 +57,7 @@ Jetton minter выходит за рамки этой статьи.
Линейная структура намного лучше:

- Пользователь разворачивает контракт `двойной траты`, который в свою очередь передает доказательство дистрибьютору
- Дистрибьютор проверяет адрес отправки `двойной траты` по состоянию инициализации `(distributor_address, user_address?)`
- Дистрибьютор проверяет адрес отправки `двойной траты` по state init `(distributor_address, user_address?)`
- Дистрибьютор проверяет доказательство, в данном случае индекс пользователя должен быть частью доказательства, и выпускает жетоны
- Дистрибьютор отправляет комиссию на кошелек для оплаты комиссии.
**MORE NAIVE ART**
Expand All @@ -68,7 +68,7 @@ Jetton minter выходит за рамки этой статьи.

### Что это такое?

Для того, чтобы получить базовое понимание, пожалуйста, посмотрите [Создание кошелька для разных шардов] (/v3/guidelines/dapps/asset-processing/payments-processing/#wallet-creation-for-different-shards)
Для того, чтобы получить базовое понимание, пожалуйста, посмотрите [Создание кошелька для разных шардов](/v3/guidelines/dapps/asset-processing/payments-processing/#wallet-creation-for-different-shards)
Вкратце, шард – это четырехбитный префикс адреса контракта. Как в сетевых технологиях.
Когда контракт находится в одном сегменте сети, сообщения обрабатываются без маршрутизации, а значит гораздо быстрее.

Expand All @@ -86,8 +86,8 @@ Jetton minter выходит за рамки этой статьи.

#### Адрес Jetton wallet

Мы не можем контролировать адрес результирующего кошелька Jetton напрямую.
Однако, если мы контролируем адрес дистрибьютора, мы можем подобрать его таким образом, чтобы Jetton кошелек для дистрибьютора оказался в том же шарде.
Мы не можем контролировать адрес результирующего jetton wallet напрямую.
Однако, если мы контролируем адрес дистрибьютора, мы можем подобрать его таким образом, чтобы jetton wallet для дистрибьютора оказался в том же шарде.
Но как это сделать? Для этого существует [lib](https://github.com/Trinketer22/turbo-wallet)!
В настоящее время она поддерживает только кошельки, но добавить поддержку произвольных контрактов достаточно просто.
Посмотрите, как это сделано для [HighloadV3](https://github.com/Trinketer22/turbo-wallet/blob/44fe7ee4300e37e052871275be8dd41035d45c3a/src/lib/contracts/HighloadWalletV3.ts#L20).
Expand Down Expand Up @@ -139,9 +139,9 @@ _ _(HashMap 64 AirdropItem) = Airdrop;

Одно из требований заключается в том, чтобы контракт _дистрибьютора_ имел обновляемый _merkle root_. Давайте пройдем шаг за шагом:

- Разверните дистрибьютора в каждом шарде (0-15) – в пределах того же шарда, что и их кошельки jetton, используя начальный `merkle_root` в качестве nonce
- Разверните дистрибьютора в каждом шарде (0-15) – в пределах того же шарда, что и их jetton wallet, используя начальный `merkle_root` в качестве nonce
- Сгруппируйте пользователей по шардам
- Для каждого пользователя найдите такой индекс, чтобы контракт _двойная трата_ `(дистрибьютор, индекс)` оказался в том же шарде, что и адрес пользователя
- Для каждого пользователя найдите такой индекс, чтобы контракт _двойная трата_ `(distributor, index)` оказался в том же шарде, что и адрес пользователя
- Сгенерируйте _merkle roots_ с индексами из шага выше
- Обновите _дистрибьюторов_ в соответствии с _merkle roots_.

Expand All @@ -150,9 +150,9 @@ _ _(HashMap 64 AirdropItem) = Airdrop;
### V3

- Пользователь разворачивает контракт _двойная трата_ в одном шарде, используя настройку индекса
- Дистрибьютор в шарде пользователя проверяет адрес отправки `двойной траты` по состоянию инициализации `(distributor_address, index)`
- Дистрибьютор в шарде пользователя проверяет адрес отправки `двойной траты` по state init `(distributor_address, index)`
- Дистрибьютор отправляет комиссию на кошелек для оплаты комиссии
- Дистрибьютор проверяет доказательство, в данном случае индекс пользователя должен быть частью доказательства, и выпускает джеттоны через кошелек jetton на том же шарде.
- Дистрибьютор проверяет доказательство, в данном случае индекс пользователя должен быть частью доказательства, и выпускает джеттоны через jetton wallet на том же шарде.

**MORE NAIVE ART**
Что в этом плохого? Давайте посмотрим внимательно.
Expand All @@ -172,6 +172,6 @@ _ _(HashMap 64 AirdropItem) = Airdrop;

Мы всегда можем пойти еще дальше.
Взгляните на кастомный [jetton wallet](https://github.com/ton-community/mintless-jetton/blob/main/contracts/jetton-utils.fc#L142), в который встроена оптимизация шардов.
В результате кошелек jetton пользователя оказывается на том же шарде, что и пользователь, с вероятностью 87%.
В результате пользовательский jetton wallet оказывается на том же шарде, что и пользователь, с вероятностью 87%.
Но это еще довольно неизведанная территория, так что вам придется действовать самостоятельно.
Удачи с TGE!

0 comments on commit 8cdac18

Please sign in to comment.