Skip to content

Commit 0d06fbc

Browse files
authored
Create README.md
1 parent 212c69c commit 0d06fbc

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

vesting/README.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Vesting — linear time-based vesting (Aptos Move)
2+
3+
**Модуль:** `Vesting::vesting`
4+
**Статус:** компилируется; CI зелёный; есть юнит-тесты
5+
**Юзкейсы:** эмиссия и разлок токенов по времени, тим-вестинг, инвест-расписания
6+
7+
---
8+
9+
## Идея
10+
Простейший вестинг с **линейным разлоком** между `[start, end]`. Денежной логики тут нет — это **учётная модель**: всё считается во внутренних числовых балансах (u64), чтобы было легко интегрировать в реальный токен позже.
11+
12+
Формула:
13+
vested(now) =
14+
0, if now <= start
15+
total, if now >= end
16+
floor(total * (now-start) / (end-start)), otherwise
17+
18+
claimable(now) = vested(now) - already_claimed
19+
20+
## Данные
21+
- `struct Schedule { ben: address, total: u64, start: u64, end: u64, claimed: u64, active: bool }`
22+
- `vector<Schedule>` — хранится под адресом админа (инициатора)
23+
- Внутренние «балансы» по адресам для демо-учёта: `view_balance(admin_addr, owner) -> u64`
24+
25+
---
26+
27+
## Публичный API (entries)
28+
- `entry init(admin: &signer)`
29+
- Однократная инициализация хранилища под `address_of(admin)`.
30+
31+
- `entry create(admin: &signer, ben: address, total: u64, start: u64, end: u64)`
32+
- Добавляет расписание. Первый созданный идёт под `id = 0`, далее по инкременту.
33+
- Валидация времени: `start < end`.
34+
35+
- `entry claim(ben: &signer, admin_addr: address, id: u64, now: u64)`
36+
- Клеймит дельту `claimable(now)` для расписания `id` и увеличивает внутренний баланс бенефициара.
37+
- Проверяет, что `ben` == назначенный бенефициар.
38+
39+
- `fun view_balance(admin_addr: address, owner: address): u64`
40+
- Возвращает внутренний «накопленный» баланс адреса в рамках хранилища `admin_addr`.
41+
42+
> ⚠️ Денежные переводов нет — это осознанно. В реальном проекте сюда можно подвязать `Coin`/трансфер NFT или экспортировать учтённую величину в другой модуль.
43+
44+
---
45+
46+
## Errors (major)
47+
- creation with an invalid time (e.g., `start >= end`)
48+
- labels non-beneficiary
49+
- accessing a non-existent schedule/uninitialized storage
50+
51+
---
52+
53+
## Unit tests (`tests/vesting_tests.move`)
54+
- **Линейный разлок**: последовательные клеймы увеличивают баланс до `total`.
55+
- **Bad time**: создание с неправильным временем падает.
56+
- **Wrong beneficiary**: клейм не тем адресом падает.
57+
58+
---
59+
60+
## Quick start (локально)
61+
62+
```bash
63+
cd vesting
64+
aptos move compile
65+
aptos move test --filter .

0 commit comments

Comments
 (0)