Умные контракты
транзакции Iroha выполняют полезные нагрузки Executable.
Executable::Instructions: упорядоченный набор специальных инструкций по IrohaExecutable::ContractCall: сопроводительный ссылочный звонок на развернутую контрактную инстанциюExecutable::Ivm: байт-код Iroha VMExecutable::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 призывает развернутую экземпляр контракта по адресу. Используйте его, когда код контракта зарегистрирован отдельно и сделки должны называть его по ссылке вместо того, чтобы каждый раз носить байт-код.
Руководство по эксплуатации
- Контрактное поведение не должно зависеть от местного времени на стене, состояния файловой системы хоста, сетевых звонков или других локальных входов.
- Большой байт-код увеличивает размер транзакции и расходы на распространение блоков.
- Предпочтительнее набирать инструкции для простых изменений в регистре. Их легче проверять и дешевле выполнять.
- Относитесь к модернизации контракта и разрешениям на регистрацию как к высокорисковым операционным контролям.
См. также: