Skip to content

Умные контракты

транзакции Iroha выполняют полезные нагрузки Executable.

  • Executable::Instructions: упорядоченный набор специальных инструкций по Iroha
  • Executable::ContractCall: сопроводительный ссылочный звонок на развернутую контрактную инстанцию
  • Executable::Ivm: байт-код Iroha VM
  • Executable::IvmProved: байт-код Iroha VM с предварительно вычисленным перекрытием инструкций и обязательствами по доказательству

Kotodama — это высокоуровневый язык смарт-контрактов Iroha. Исходный файл .ko компилируется в детерминированный байт-код IVM, который по соглашению сохраняется как артефакт .to для развертывания. Kotodama предназначен только для IVM. Он не предназначен для RISC-V или WebAssembly.

Первый выпуск поддерживает только версию ABI 1. Политика syscall и pointer-ABI безусловно применяется при допуске и исполнении контракта; переключателя совместимости во время выполнения нет.

Когда использовать умные контракты

Используйте обычные инструкции, если транзакция может быть выражена напрямую:

  • регистрационные или нерегистрированные объекты
  • активы, полученные в результате перечисления или сжигания
  • обновление метаданных
  • предоставление или отмена разрешений
  • выполнить триггер
  • установленные параметры на цепочке

Используйте смарт-контракт, когда транзакции требуется упакованная логика, которую сложно выразить в виде статической последовательности инструкций, или когда развернутый пример контракта должен быть вызван по ссылке.

IVM Исполнительные устройства

Executable::Ivm содержит сырой байт-код IVM. Ноды выполняют этот байт- код в пределах установленных для цепочки ограничений времени запуска. Сохраните байт- код небольшим и детерминистским; контракты являются частью исполнения транзакций, поэтому влияют на консенсус.

Executable::IvmProved предназначен для протокольных потоков, содержащих:

  • IVM байт-код
  • покрытие детерминистической инструкции
  • обязательство о проведении событий
  • обязательство в области газовой политики

Доказательство связывает накладку с выполненным байт-кодом. В зависимости от политики трубопровода, валидаторы могут проверить исполнение доказательства и воспроизвести его в качестве дополнительной проверки безопасности.

Развернутые контрактные звонки

Executable::ContractCall призывает развернутую экземпляр контракта по адресу. Используйте его, когда код контракта зарегистрирован отдельно и сделки должны называть его по ссылке вместо того, чтобы каждый раз носить байт-код.

Руководство по эксплуатации

  • Контрактное поведение не должно зависеть от местного времени на стене, состояния файловой системы хоста, сетевых звонков или других локальных входов.
  • Большой байт-код увеличивает размер транзакции и расходы на распространение блоков.
  • Предпочтительнее набирать инструкции для простых изменений в регистре. Их легче проверять и дешевле выполнять.
  • Относитесь к модернизации контракта и разрешениям на регистрацию как к высокорисковым операционным контролям.

См. также: