Параметры конфигурации
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @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" и других параметрах в разделе с внешними сообщениями здесь.