Визначення

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 про внутрішню модель облікових записів та роль логічних міток часу