Предварительно скомпилированные контракты
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
Предварительно скомпилированный смарт-контракт — это контракт с реализацией C++ в узле. Когда валидатор запускает транзакцию по такому смарт-контракту, он может выполнить эту реализацию вместо TVM. Это повышает производительность и позволяет снизить затраты на вычисления.
Конфигурация
Список предварительно скомпилированных контрактов хранится в конфигурации мастерчейна:
precompiled_smc#b0 gas_usage:uint64 = PrecompiledSmc;
precompiled_contracts_config#c0 list:(HashmapE 256 PrecompiledSmc) = PrecompiledContractsConfig;
_ PrecompiledContractsConfig = ConfigParam 45;
list:(HashmapE 256 PrecompiledSmc)
— это карта (code_hash -> precomplied_smc)
.
Если хэш кода контракта найден в этой карте, то контракт считается предварительно скомпилированным.
Выполнение контракта
Любая транзакция по предварительно скомпилированному смарт-контракту (т. е. любому контракту с хэшем кода, найденным в ConfigParam 45
) выполняется следующим образом:
- Получите
gas_usage
из конфигурации мастерчейна. - Если баланса недостаточно для оплаты газа
gas_usage
, то фаза вычислений завершается неудачей с причиной пропускаcskip_no_gas
. - Код может быть выполнен двумя способами: