Skip to content

Instantly share code, notes, and snippets.

@homakov
Created December 6, 2025 19:32
Show Gist options
  • Select an option

  • Save homakov/b77d7139aee49c2d3828172982b801e4 to your computer and use it in GitHub Desktop.

Select an option

Save homakov/b77d7139aee49c2d3828172982b801e4 to your computer and use it in GitHub Desktop.
cycle.md
⏺ Платёж A → Hub → B: Полный жизненный цикл
---
ФАЗА 0: Открытие аккаунтов
A открывает аккаунт с Hub:
A [==collat|credit——→] Hub
A кладёт $1000 collateral → A может ОТПРАВЛЯТЬ хабу
A открывает $1000 credit к Hub → A может ПОЛУЧАТЬ от хаба
B открывает аккаунт с Hub:
B [==collat|credit——→] Hub
B кладёт $500 collateral → B может ОТПРАВЛЯТЬ хабу
B открывает $2000 credit к Hub → B может ПОЛУЧАТЬ от хаба
Hub ничего не делает — просто принимает аккаунты.
---
ФАЗА 1: A инициирует платёж
A хочет заплатить B $100
A не имеет прямого аккаунта с B
Роутинг находит путь: A → Hub → B
---
ФАЗА 2: Нога A → Hub
ДО:
A [===$1000====|----$1000--→] Hub
collateral credit to hub
ondelta: 0
ПОСЛЕ отправки $100:
A [===$1000====|----$1000--→] Hub
ondelta: +$100 (A должен Hub)
A's capacity to send: $1000 - $100 = $900 осталось
Что произошло:
- A ушёл в долг к Hub на $100
- Долг покрыт collateral'ом A
- Hub получил $100 (записано в ondelta)
---
ФАЗА 3: Нога Hub → B
ДО:
B [===$500=====|----$2000--→] Hub
ondelta: 0
ПОСЛЕ получения $100:
B [===$500=====|----$2000--→] Hub
ondelta: -$100 (Hub должен B)
B's credit to hub used: $100 of $2000
Что произошло:
- Hub ушёл в долг к B на $100
- Долг покрыт credit'ом который B открыл к Hub
- B "получил" $100 (Hub ему должен)
---
ФАЗА 4: Итоговое состояние (off-chain)
A Hub B
| | |
[+$100 долг] [нетто: 0] [-$100 кредит]
A должен Hub Hub должен A Hub должен B
Hub должен B (B дал кредит)
─────────────
Баланс Hub:
+$100 от A
-$100 к B
= 0 ✓
Инвариант сохранён: Hub посредник, его баланс = 0
---
ФАЗА 5: Settlement (on-chain, опционально)
Если B хочет вывести $100:
1. B → Hub: "Хочу settlement на $100"
2. Hub отправляет tx в J-Machine:
Depository.settle(Hub, B, tokenId, $100)
3. J-Machine (on-chain):
- Hub.reserves -= $100
- B.reserves += $100
4. После settlement:
B [===$500=====|----$2000--→] Hub
ondelta: 0 (долг погашен on-chain)
B.reserves: +$100 (можно withdraw)
---
ФАЗА 6: A пополняет collateral
Если A потратил весь collateral:
1. A → J-Machine: deposit $500 to reserves
2. A.reserves: +$500
3. A → Hub: "Reserve-to-Collateral $500"
4. A [===$1500====|----$1000--→] Hub
↑ новый collateral
---
Визуально весь цикл:
OFF-CHAIN (instant, free) ON-CHAIN (slow, costs gas)
═══════════════════════════ ════════════════════════════
A ──[$100]──→ Hub ──[$100]──→ B
↓ ↓
ondelta +100 ondelta -100
↓ ↓
(A owes Hub) (Hub owes B)
▼ settlement
┌─────────┐
│J-Machine│
│Depository│
└────┬────┘
Hub.reserves -= $100
B.reserves += $100
---
Ключевые моменты:
1. Платёж мгновенный (off-chain deltas)
2. Hub не тратит свои деньги — только роутит
3. Settlement — только когда нужен cash-out
4. Всё держится на credit'ах которые юзеры открывают к хабу
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment