Визначення
Lamport — одиниця логічного часу в мережі Solana, названа на честь Леслі Лампорта, автора концепції логічних годинників. На відміну від звичайних секунд, Lamport не вимірює фізичний час: це лічильник, який визначає порядок подій у розподіленій системі без потреби синхронізувати годинники між вузлами.
У контексті Solana кожен транзакції присвоюється значення Lamport, а кожен обліковий запис фіксує найбільше значення Lamport, яке його торкнулося. Це дозволяє кластеру однозначно визначати, яка подія відбулася раніше, а яка — пізніше.
Як працює
Механізм базується на кількох простих правилах:
- Генезис-блок починається з значенням Lamport, рівним нулю.
- Кожен вузол веде власний лічильник і збільшує його на одиницю з кожною обробленою подією.
- Коли вузол отримує повідомлення з іншого вузла, він порівнює свій лічильник із тим, що прийшов у повідомленні, і встановлює своє значення як максимум із двох плюс одиниця.
- Транзакція містить поле lamports — це не плата, а саме мітка логічного часу, яка вказує, коли транзакція була створена відносно інших подій.
- Обліковий запис зберігає найвище значення Lamport серед усіх транзакцій, що його зачепили. Завдяки цьому кластер знає, чи оновлювався запис після певної події.
Lamport забезпечує часткове впорядкування подій: якщо подія A логічно передує події B, їхні значення Lamport гарантовано відображають цей порядок. Проте однакові значення не означають одночасність — вони лише свідчать про те, що події відбулися в різних гілках і порядок між ними не визначений.
Приклад
Уявіть трьох валідаторів: Альфа, Бета і Гамма. Усі починають з лічильника 0.
- Альфа обробляє локальну транзакцію і встановлює свій лічильник на 1.
- Бета обробляє свою транзакцію — також отримує 1.
- Альфа надсилає повідомлення Беті. У повідомленні вказано Lamport = 1. Бета порівнює: свій 1 і прийнятий 1, бере максимум (1) і додає 1 — отримує 2.
- Гамма отримує повідомлення від Бети з Lamport = 2, свій лічильник був 0. Максимум = 2, плюс 1 — Гамма переходить на 3.
Тепер за значеннями лічильників видно логічну послідовність: події Альфи передували подіям Бети, а ті, у свою чергу, передували подіям Гамми. Жоден фізичний годинник для цього не знадобився.
Типова помилка
Найпоширеніше хибне уявлення — плутати Lamport із платою за транзакцію через те, що в інтерфейсах гаманців та експлорерів часто фігурує поле lamports у значеннях на кшталт 5000 або 10000. У таких випадках йдеться про мікроодиниці токена SOL (1 SOL = 1 000 000 000 lamports), а не про логічний час. Це дві різні суті з однаковою назвою.
Щоб розрізнити їх, орієнтуйтеся на контекст: якщо мова про порядок подій, послідовність обробки або внутрішній стан облікового запису — це логічний час. Якщо про суму переказу, комісію чи баланс — це одиниця валюти.
Пов'язані матеріали
Внутрішні переходи
- Rent (орендна плата) — як значення Lamport на обліковому записі впливає на розрахунок оренди
- Nonce — чим логічний час відрізняється від одноразового номера транзакції
Додаткові ресурси
- Оригінальна стаття Леслі Лампорта «Time, Clocks, and the Ordering of Events in a Distributed System» (1978) — фундаментальна робота, на якій базується механізм
- Документація Solana про внутрішню модель облікових записів та роль логічних міток часу