Параметры конфигурации
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
Читайте текущие значения через tonviewer
👋 Введение
На этой странице вы можете найти описание параметров конфигурации, используемых в блокчейне TON. TON имеет сложную конфигурацию со множеством технических параметров: некоторые используются самим блокчейном, некоторые — экосистемой. Однако лишь немногие понимают, что означают эти параметры. Эта статья необходима для предоставления пользователям простого способа понимания параметров и их назначения.
💡 Предварительные условия
Этот материал предназначен для чтения вместе со списком параметров. Вы можете просмотреть значения параметров в текущей конфигурации, а способ их записи в ячейки описан в файле block.tlb в формате TL-B.
Двоичное кодирование в конце параметра блокчейна TON представляет собой сериализованное двоичное представление его конфигурации, что позволяет эффективно хранить или передавать конфигурацию. Точные детали сериализации зависят от конкретной схемы кодирования, используемой блокчейном TON.
🚀 Давайте начнем!
Все параметры по порядку, и вы не заблудитесь. Для удобства используйте правую боковую панель для быстрой навигации.
Param 0
Этот параметр — адрес специального смарт-контракта, в котором хранится конфигурация блокчейна. Конфигурация хранится в контракте для упрощения ее загрузки и изменения во время голосования валидаторов.
В параметре конфигурации записывается только хэш-часть адреса, так как контракт всегда находится в мастерчейне (workchain -1). Поэтому полный адрес контракта будет записан как -1:<value of the configuration parameter>
.
Param 1
Этот параметр — адрес смарт-контр акта Elector, отвечающего за назначение валидаторов, распределение вознаграждений и голосование по изменениям параметров блокчейна.
Param 2
Этот параметр представляет собой адрес Системы, от имени которой выпускаются новые TON и отправляются в качестве вознаграждения за проверку блокчейна.
Если параметр 2 отсутствует, вместо него используется параметр 0 (вновь выпускаемые TON поступают из смарт-контракта конфигурации).
Param 3
Этот параметр — адрес сборщика комиссий за транзакции.
Если параметр 3 отсутствует (как это было на момент написания), комиссии за транзакции отправляются в смарт-контракт Elector (параметр 1).
Param 4
Этот параметр — адрес корневого DNS-контракта сети TON.
Более подробную информацию можно найти в статье TON DNS & Domains и в более подробном оригинальном описании здесь. Этот контракт не отвечает за продажу доменов .ton.
Param 6
Этот параметр отвечает за комиссии за выпуск новых валют.
Currently, minting additional currency is not implemented and does not work. The implementation and launch of the minter are planned.
Подробнее о проблемах и перспективах можно узнать в соответствующей статье.
Param 7
Этот параметр хранит объем каждой из дополнительных валют в обращении. Данные хранятся в виде словаря (двоичное дерево; вероятно, во время разработки TON эта структура была ошибочно названа hashmap) extracurrency_id -> amount
, сумма представлена как VarUint 32
- целое число от 0
до 2^248
.
Param 8
Этот параметр указывает версию сети и дополнительные возможности, поддерживаемые валидаторами.
Валидаторы - это узлы в сети блокчейна, которые отвечают за создание новых блоков и проверку транзакций.
-
version
: Это поле указывает версию. -
capabilities
: Это поле представляет собой набор флагов, которые используются для указания наличия или отсутствия определенных функций или возможностей.
Таким образом, при обновлении сети валидаторы будут голосовать за изменение параметра 8. Таким образом, сеть TON может быть обновлена без простоев.
Param 9
Этот параметр содержит список (двоичное дерево) обязательных параметров. Он гарантирует, что определенные параметры конфигурации всегда присутствуют и не могут быть удалены предложением об изменении конфигурации, пока не изменится параметр 9.
Param 10
Этот параметр представляет собой список (двоичное дерево) критических параметров TON, изменение которых существенно влияет на сеть, поэтому проводятся дополнительные раунды голосования.
Param 11
Этот параметр указывает, при каких условиях принимаются предложения об изменении конфигурации TON.
min_tot_rounds
- минимальное количество раундов до того, как предложение может быть примененоmax_tot_rounds
- максимальное количество раундов, по достижении которого предложение будет автоматически отклоненоmin_wins
- необходимое количество побед (3/4 валидаторов по сумме залога должны проголосовать "за")max_losses
- максимальное количество проигрышей, по достижении которого предложение будет автоматически отклоненоmin_store_sec
иmax_store_sec
определяют возможный временной интервал, в течение которого предложение будет хранитьсяbit_price
иcell_price
указывают цену хранения одного бита или одной ячейки предложения
Param 12
Этот параметр представляет собой конфигурацию воркчейна в блокчейне TON. Воркчейны в блокчейне TON спроектированы как независимые блокчейны, которые могут работать параллельно, что позволяет TON масштабировать и обрабатывать очень большое количество транзакций и смарт-контрактов.
Параметры конфигурации воркчейна
-
enabled_since
: метка времени UNIX момента включения этого воркчейна; -
actual_min_split
: минимальная глубина разделения (шардинга) этого воркчейна, поддерживаемая валидаторами; -
min_split
: минимальная глубина разделения этого воркчейна, задаваемая конфигурацией; -
max_split
: максимальная глубина разделения этого воркчейна; -
basic
: логический флаг (1 для true, 0 для false), указывающий, является ли этот воркчейн базовым (обрабатывает монеты TON, смарт-контракты на основе виртуальной машины TON); -
active
: логический флаг, указывающий, активен ли этот воркчейн в данный момент; -
accept_msgs
: логический флаг, указывающий, принимает ли этот воркчейн сообщения в данный момент; -
flags
: дополнительные флаги для воркчейна (зарезервировано, в настоящее время всегда 0); -
zerostate_root_hash
иzerostate_file_hash
: хеши первого блока воркчейна; -
version
: версия воркчейна; -
format
: формат воркчейна, включающий vm_version и vm_mode — используемую там виртуальную машину.
Param 13
Этот параметр определяет стоимость подачи жалоб на некорректную работу валидаторов в контракте Elector.
Param 14
Этот параметр представляет собой вознаграждение за создание блока в блокчейне TON. Nanogram — это nanoTON, таким образом, вознаграждение за создание блока в мастерчейне равно 1,7 TON, а в основном воркчейне — 1,0 TON (при этом в случае разделения воркччейна вознаграждение за блок также разделяется: если в воркчейне есть два шардчейна, то вознаграждение за блок шарда составит 0,5 TON).
Param 15
Этот параметр содержит длительность различных этапов выборов и работы валидаторов в блокчейне TON.
Для каждого периода валидации существует election_id
, равный времени в формате UNIX на момент начала валидации.
Вы можете получить текущий election_id
(если выборы продолжаются) или прошлый, вызвав соответствующие get-методы контракта Elector active_election_id
и past_election_ids
.
Параметры конфигурации воркчейна
-
validators_elected_for
: количество секунд, в течение которых выбранный набор валидаторов выполняет свою роль (один раунд). -
elections_start_before
: за сколько секунд до окончания текущего раунда начнется процесс выборов на следующий период. -
elections_end_before
: за сколько секунд до окончания текущего раунда будут выбраны валидаторы на следующий раунд. -
stake_held_for
: период, в течение которого удерживается стейк валидатора (для обработки жалоб) после окончания раунда.
Каждое значение в аргументах определяется типом данных uint32
.
Примеры
В блокчейне TON приня то условно делить периоды валидации на четные и нечетные. Эти раунды следуют друг за другом. Поскольку голосование за следующий раунд происходит во время предыдущего, валидатору необходимо разделить средства на два пула, чтобы иметь возможность участвовать в обоих раундах.
Основная сеть
Текущие значения:
constants = {
'validators_elected_for': 65536, # 18.2 hours
'elections_start_before': 32768, # 9.1 hours
'elections_end_before': 8192, # 2.2 hours
'stake_held_for': 32768 # 9.1 hours
}
Схема:
Как рассчитать периоды?
Пусть election_id = validation_start = 1600032768
. Тогда:
election_start = election_id - constants['elections_start_before'] = 1600032768 - 32768 = 1600000000
election_end = delay_start = election_id - constants['elections_end_before'] = 1600032768 - 8192 = 1600024576
hold_start = validation_end = election_id + constants['validators_elected_for'] = 1600032768 + 65536 = 1600098304
hold_end = hold_start + constants['stake_held_for'] = 1600098304 + 32768 = 1600131072
Таким образом, на данный момент длина одного раунда одной четности составляет 1600131072 - 1600000000 = 131072 секунд = 36,40888... часов
Тестовая сеть
Текущие значения:
constants = {
'validators_elected_for': 7200, # 2 hours
'elections_start_before': 2400, # 40 minutes
'elections_end_before': 180, # 3 minutes
'stake_held_for': 900 # 15 minutes
}
Схема
Как рассчитать периоды?
Пусть election_id = validation_start = 160002400
. Тогда:
election_start = election_id - constants['elections_start_before'] = 160002400 - 2400 = 1600000000
election_end = delay_start = election_id - constants['elections_end_before'] = 160002400 - 180 = 160002220
hold_start = validation_end = election_id + constants['validators_elected_for'] = 160002400 + 7200 = 160009600
hold_end = hold_start + constants['stake_held_for'] = 160009600 + 900 = 160010500
Таким образом, на данный момент длина одного раунда одной четности составляет 160010500 - 1600000000 = 10500 секунд = 175 минут = 2,91666... часов
Param 16
Этот параметр представляет собой ограничение на количество валидаторов в блокчейне TON. Он напрямую используется смарт-контрактом Elector.
Параметры настройки количества валидаторов для выборов:
-
max_validators
: этот параметр представляет собой максимальное количество валидаторов, которые могут участвовать в работе се ти в любой момент времени. -
max_main_validators
: этот параметр представляет собой максимальное количество валидаторов мастерчейна. -
min_validators
: этот параметр представляет собой минимальное количество валидаторов, которые должны поддерживать работу сети.
- Максимальное количество валидаторов больше или равно максимальному количеству валидаторов мастерчейна.
- Максимальное количество валидаторов мастерчейна должно быть больше или равно минимальному количеству валидаторов.
- Минимальное количество валидаторов должно быть не менее 1.
Param 17
Этот параметр представляет конфигурацию параметров стейка в блокчейне TON. Во многих системах блокчейна, особенно тех, которые используют алгоритм консенсуса Proof-of-Stake или Delegated Proof-of-Stake, владельцы криптовалюты, встроенные в сеть, могут "стейкать" свои токены, чтобы стать валидаторами и получать вознаграждения.
Параметры конфигурации:
-
min_stake
: этот параметр представляет минимальное количество TON, которое заинтересованная сторона должна поставить в стейк для участия в процессе валидации. -
max_stake
: этот параметр представляет максимальное количество TON, которое заинтересованная сторона может передать в стейк. -
min_total_stake
: этот параметр представляет минимальное общее количество TON, которое должно удерживаться выбранным набором валидаторов. -
max_stake_factor
: этот параметр является множителем, указывающим, во сколько раз максимально эффективный стейк (залог) может превышать минимальный стейк, отправленный любым другим валидатором.
Каждое значение в аргументах определяется типом данных uint32
.
Param 18
Этот параметр представляет собой конфигурацию для определения цен на хранение данных в блокчейне TON. Это служит мерой предотвращения спама и поощряет обслуживание сети.
Словарь параметров платы за хранение:
-
utime_since
: этот параметр предоставляет начальную временную метку Unix, с которой применяются указанные цены. -
bit_price_ps
иcell_price_ps
: эти параметры представляют цены на хранение одного бита или одной ячейки информации в основных воркчейнах блокчейна TON на 65536 секунд -
mc_bit_price_ps
иmc_cell_price_ps
: эти параметры представляют цены на вычислительные ресурсы, в частности, в мастерчейне TON на 65536 секунд
utime_since
принимает значения в типе данных uint32
.
Остальные принимают значения в типе данных uint64
.
Param 20 и 21
Эти параметры определяют стоимость вычислений в сети TON. Сложность любого вычисления оценивается в единицах газа.
-
flat_gas_limit
иflat_gas_price
: Определенное начальное количество газа предоставляется по ценеflat_gas_price
(для компенсации затрат на запуск виртуальной машины TON). -
gas_price
: Этот параметр отражает цену газа в сети в nanoton за 65536 единиц газа. -
gas_limit
: Этот параметр представляет максимальное количество газа, которое может быть потреблено за одну транзакцию. -
special_gas_limit
: Этот параметр представляет ограничение на количество газа, которое может быть потреблено за одну транзакцию специального (системного) контракта. -
gas_credit
: Этот параметр представляет кредит в единицах газа, который предоставляется транзакциям для проверки внешнего сообщения. -
block_gas_limit
: Этот параметр представляет максимальное количество газа, которое может быть использовано в пределах одного блока. -
freeze_due_limit
иdelete_due_limit
: лимиты накопленных комиссий за хранение (в nanoTON), при достижении которых контракт замораживается и соответственно удаляется.
Подробнее о "gas_credit" и других параметрах в разделе с внешними сообщениями здесь.
Param 22 и 23
Эти параметры устанавливают ограничения на блок, по достижении которых блок завершается, а обратный вызов оставшихся сообщений (если таковые имеются) переносится в следующий блок.
Параметры конфигурации:
-
bytes
: Этот раздел устанавливает ограничения на размер блока в байтах. -
underload
: Недогрузка — это состояние, когда шард понимает, что нагрузки нет, и склоняется к слиянию, если соседний шард готов. -
soft_limit
: Мягкий предел — при достижении этого предела внутренние сообщения перестают обрабатываться. -
hard_limit
: Жесткий предел — это абсолютный максимальный размер. -
gas
: Этот раздел устанавливает ограничения на количество газа, которое может потреблять блок. Газ в контексте блокчейна — это показатель вычислительной работы. Ограничения на недогрузку, мягкий и жесткий предел работают так же, как и для размера в байтах. -
lt_delta
: Этот раздел устанавливает ограничения на разницу в логическом времени между первой и пос ледней транзакцией. Логическое время — это концепция, используемая в блокчейне TON для упорядочивания событий. Ограничения на недогрузку, мягкий и жесткий лимит работают так же, как и для размера в байтах и газе.
В случае недостаточной нагрузки на шард и, соответственно, желания объединиться с соседом, soft_limit
определяет состояние, выше которого внутренние сообщения перестают обрабатываться, но внешние продолжаются. Внешние сообщения обрабатываются до тех пор, пока не будет достигнут лимит, равный (soft_limit + hard_limit)/2
.
Param 24 и 25
Параметр 24 представляет собой конфигурацию стоимости отправки сообщений в мастерчейне блокчейна TON.
Параметр 25 представляет собой конфигурацию стоимости отправки сообщений во всех остальных случаях.
Параметры конфигурации, определяющие стоимость пересылки:
-
lump_price
: этот параметр означает базовую цену пересылки сообщения независимо от его размера или сложности. -
bit_price
: этот параметр представляет стоимость за бит пересылки сообщения. -
cell_price
: этот параметр отражает стоимость пересылки сообщения зя ячейку. Ячейка является базовой единицей хранения данных в блокчейне TON. -
ihr_price_factor
: это фактор, используемый для расчета стоимости немедленной маршрутизации гиперкуба (IHR).к сведениюIHR — это метод доставки сообщений в сети блокчейна TON, где сообщения отправляются непосредственно в цепочку шардов получателя.
-
first_frac
: этот параметр определяет долю оставшегося остатка, которая будет использоваться для первого перехода по маршруту сообщения. -
next_frac
: этот параметр определяет долю оставшегося остатка, которая будет использоваться для последующих переходов по маршруту сообщения.
Param 28
Этот параметр обеспечивает конфигурацию протокола Catchain в блокчейне TON. Catchain — это протокол консенсуса самого низкого уровня, используемый в TON для достижения соглашения между валидаторами.
Параметры конфигурации:
-
flags
: общее поле, которое можно использовать для установки различных двоичных параметров. В этом случае оно равно 0, что означает, что никакие конкретные флаги не установлены. -
shuffle_mc_validators
: логическое значение, указывающее, следует ли перемешивать валидаторы мастерчейна или нет. Если этот параметр установлен в 1, валидаторы будут перемешиваться; в противном случае — нет. -
mc_catchain_lifetime
: время жизни catchain групп мастерчейна в секундах. -
shard_catchain_lifetime
: время жизни catchain групп шардчейна в секундах. -
shard_validators_lifetime
: время жизни группы валидаторов шардчейна в секундах. -
shard_validators_num
: количество валидаторов в каждой группе валидации шардчейна.
Param 29
Этот параметр предоставляет конфигурацию для протокола консенсуса над catchain (Param 28) в блокчейне TON. Протокол консенсуса является важнейшим компонентом сети блокчейна и гарантирует, что все узлы согласятся с состоянием распределенного реестра.