-
Notifications
You must be signed in to change notification settings - Fork 11
[Russian] Block Protocol 2.0
Одним из наиболее критикуемых моментов в Эфириум и Биткойн-подобных протоколах в целом является масштабируемость. При том, что разработчики ядра Биткойн, равно как и разработчики других проектов (в частности, Ripple) произвели ряд точечных улучшений способа хранения блокчейна — например, отделили состояние ("ledger" or "UTXO set") от списка транзакций, а также , не было сделано главное — каждая полная нода всё ещё обязана проводить каждую транзакцию (что приводит к). На данный момент Эфириум тоже не решает эту проблему.
Ниже описан протокол хранения и добычи блоков, а особенно the stack trace mechanism.
При майнинге майнер на самом деле постоянно проходит следующую процедуру:
- Берёт на входе
-
uncle_headers
— -
timestamp
— текущее время -
parent
— родительский (предыдущий) блок -
extra_data
— -
coinbase
— -
txlist
— пачка транзакций, которая и войдёт в этот блок
- Автоматически присваивает переменным значения:
difficulty = adjust_difficulty(parent.difficulty,timestamp,parent.timestamp)
-
reward = 15 * 10^18
(цифра приведена для примера, точный размер вознаграждения ещё будет продумываться) block_header = [ parent.hash, parent.number + 1, TRIEHASH(txlist), TRIEHASH(uncle_headers), 0, coinbase, 0, difficulty, timestamp, extra_data, 0 ]
- Взять на входе:
-
block
— заголовок блока -
uncle_list
— список дядь заголовка -
now
— текущее время (с точки зрения процессора майнера)
- Проверить следующее:
-
Проверить, что
txstack.root == ''
-
Проверить, что
state.root == block.state_root
-
Если хотя бы какая-либо из проверок не прошла успешно, return FALSE. В противном случае return TRUE.
Если блок валиден, необходимо определить TD (total difficulty = полная сложность) для нового блока. Она определяется рекурсивно: начальное условие имеет вид TD(genesis_block) = 0
, при переходе к следующему блоку изменяется по закону TD(B) = TD(B.parent) + sum([u.difficulty for u in B.uncles]) + B.difficulty
. Задать
У описанного выше протокола есть один недостаток: он уязвим к атакам вида "отказ в обслуживании".