Строим виртуальный мир: как использовать технологию блокчейн, чтобы успевать за «цифровыми богами»

Автор: @therealbytes @_yonada Составитель: Джастин @captainz

Наша цель, как создателей виртуальных миров, — создать среду, которая будет интересной и увлекательной для пользователей. Это требует от нас найти баланс между проектированием цифровой физики, которая допускает появление сложного и неожиданного поведения, и обеспечением того, чтобы существующая инфраструктура могла поддерживать это поведение. Для этого нам нужно рассмотреть три основных измерения цифровой физики: время, форму ее законов и степень применимости этих законов.

время

Мы называем течение времени в виртуальном мире итеративным применением законов мира к самому себе. Каждое отдельное приложение является «мгновением» в течении времени в этом мире. Один из способов проектирования времени в мире — сделать его непрерывным с внешним временем. В виртуальном мире, основанном на блокчейне, каждый блок соответствует определенному количеству прошлых моментов в мире, независимо от того, какие транзакции содержит блок. Это известно как синхронное время или феномен «тиков». Такой подход может сделать мир более интересным для пользователей, поскольку они могут видеть результаты своих действий в режиме реального времени. Кроме того, это приводит к увеличению времени пребывания в мире, и мир продолжает обновляться, что поощряет интересное поведение.

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

Эта трудность становится очевидной, когда вы представляете что-то, казалось бы, простое: сетевую игру с неигровыми персонажами (NPC). В основной сети Ethereum вы можете определить функцию обновления, которая устанавливает положение каждого NPC на игровой карте, и периодически вызывать ее из внешней учетной записи для обновления их положения. Но это может быть ненадежно, потому что вы не можете гарантировать, что внешний аккаунт не будет перебит по плате за газ в блоке, который должен вызвать обновление. Поэтому временная структура в вашей игре будет дрейфовать (в качестве примера возьмем исходную функцию CryptoKitties giveBirth(); по мере увеличения платы за газ в сети Axiom Zen фактически должна увеличить вознаграждение за вызов функции giveBirth, чтобы гарантировать, что новая NFT Транзакция рождения называется через 256 блоков после того, как пользователь породит Китти). Мы называем этот метод использования внешних учетных записей «ручной пометкой».

Пользовательские сводки дают нам больше гибкости для добавления «галочки» в цепочку, нет необходимости во внешних учетных записях, а синхронизированное опережение времени гарантируется протоколом. Мы называем этот метод «автоматической галочкой». Автоматические тики могут быть реализованы путем написания «тикового контракта», который вызывается самим протоколом, а не внешней учетной записью.

В качестве примера @therealbytes разработала тестовую цепочку тиков на основе стека OP, которая запускает реализацию игры Conway's Game of Life, которая тикает автоматически (вы можете найти видеодемонстрацию этого здесь). Bytes использует модифицированную системную транзакцию для автоматического вызова контракта моделирования клеточного автомата тик-тик. Чтобы полностью проверить пределы самой цепочки, он реализовал игру двумя способами: один как смарт-контракт Solidity, работающий в цепочке, а другой — как предварительная компиляция самой цепочки. Реализация Solidity максимально загружает ЦП после достижения сетки 70x70 с двумя обновлениями на блок (1 блок/сек или около 10 тыс. ячеек/сек), в то время как цепочка пользовательского предварительно скомпилированного движка использует около 6%. Достижение той же скорости для 256x256 grid с более высоким процессором (около 130 тыс. ячеек/сек).

В последнем предложении последнего абзаца ключевое слово «достижение предела». Цепочки «тик-тик» добавляют дополнительный уровень сложности: каждый дополнительный блок требует, чтобы транзакции, имитирующие игру, затрагивали больше состояний. В конце концов, узлы объединения будут ограничены необработанными вычислениями (ЦП, дисковый ввод-вывод и т. д.). Единственным решением здесь является использование узлов с более высокой пропускной способностью.

Альтернативой «синхронному времени» является «асинхронное время». В соответствии с этой схемой течение времени в мире не обязательно опережает внешнее время. Вместо этого время обычно движется вперед, когда происходят определенные события (обычно действия пользователя). Традиционные настольные игры, в которых нет таймера, относятся к той же категории. Добиться асинхронного времени в цепочке проще, потому что это модель, для поддержки которой предназначены блокчейны. Тем не менее, он также жертвует некоторыми функциями, которые могли бы сделать мир более интересным (например, автоматическое перемещение NPC).

WildWood, ранняя версия экспериментальной игры от @notdavidhuang и cha0sg0d, раскрывает эту жертву. В этой игре два игрока должны защитить свою базу от осады агрессивных NPC. В более ранних версиях игры движение NPC срабатывало только тогда, когда игрок двигался сам — непрактичная реализация асинхронного времени. После добавления тиков NPC двигались, но оставалась другая проблема. Цепочка тикает каждую секунду, а это значит, что если игрок перемещается чаще одного раза в секунду, игра должна транслировать позицию игрока на карте с обновлениями из оптимистического роллапа. Однако ваши товарищи по команде не увидят вашего клиента автоматически, а это значит, что обновление позиций игроков будет происходить с задержкой. Чтобы решить эту проблему, команда использовала службу ретрансляции MUD, одноранговую сеть для трансляции локальных клиентов по всей цепочке. Вуаля, переход от асинхронного времени к синхронному выполнен.

Законы закрытых и открытых форм

Создатели мира также должны решить, следует ли их виртуальный мир открытому или закрытому представлению. Выражения в закрытой форме имеют фиксированное количество операций. Однако количество операций, выраженных в открытой форме (или рекурсивно), растет в соответствии с заданными переменными. В представлениях открытой формы будущее состояние мира может быть рассчитано только путем многократного применения законов мира к известным состояниям. Сложные графические среды, такие как Dwarf Fortress, обычно попадают в эту категорию. Представления в закрытой форме, с другой стороны, позволяют вычислять любое будущее состояние из прошлых состояний и времени, прошедшего между ними (при условии, что никакие будущие действия пользователя не изменят состояние), например скорость добычи ресурсов в Age of Empires II.

Открытые формы могут сделать виртуальные миры более интересными, потому что, как и реальный мир, они непредсказуемы. Предсказание будущего состояния мира требует все больше и больше времени и вычислительных ресурсов (хорошим примером является игра Конвея «Жизнь», реализованная в сети: вы не можете вычислить произвольные будущие состояния, потому что вам нужно запустить игру вовремя). Кроме того, из простых микроскопических взаимодействий могут возникать неожиданные макроскопические явления. В мире, управляемом закрытой формой, такое эмерджентное поведение обычно происходит только извне, через действия пользователей (они сами, как и в открытой форме), а не внутри самой физики мира.

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

Диапазон времени и формы

Рассмотрим текущий стандартный подход к динамике в цепочке, подход, известный как «ленивые обновления». В ленивом обновлении игрок инициирует начало и конец действия, но время между ними моделируется, а не рассчитывается напрямую. Например, игрок сажает яблоню в 1-й части, а затем собирает яблоки в 10-й части. Логика ленивых обновлений может быть написана так, чтобы игроки могли собирать одно яблоко в единицу времени, всего 9 яблок. Это отлично подходит для логики обновления с функциями закрытой формы (например, одно яблоко на блок), но терпит неудачу, если логика фарма изменяется на основе ввода между действиями игрока. Если в 5-м блоке проливной дождь увеличивает скорость роста яблок, а в 7-м блоке нашествие саранчи почти уничтожает урожай, то в 10-м блоке не имеет значения, сколько яблок игрок может собрать. события, которые произошли (вам не хватит вычислительной мощности, чтобы догнать новое состояние). Тем не менее, ленивые обновления отлично подходят для дешевых расчетов определенных мобов (например, растений с фиксированной скоростью роста), но этого недостаточно для полного набора инструментов для динамичного мира.

В реальном мире время повсюду и проходит одновременно, а Вселенная потенциально бесконечна (хотя и с некоторыми осложнениями теории относительности). Однако в виртуальном мире это не всегда так.

Во-первых, виртуальные миры могут быть четко ограничены. Возможности для интриг, как правило, увеличиваются с увеличением размера — в мире из 20 миллиардов галактик происходит больше вещей, чем в мире из двух атомов, — но растут и вычислительные затраты. Оба эти отношения тесно связаны с двумя упомянутыми ранее компромиссами: течением времени и физической формой.

Во-вторых, в виртуальном мире время не должно течь повсюду. Мир можно разделить на отдельные регионы с разным интервалом времени, чтобы уменьшить вычислительную нагрузку мира. Например, более сложные и дорогие физические правила можно использовать в областях с активностью пользователя, а более простые физические правила — в местах, где активности нет. Недостаток этого подхода двоякий: он может сделать мир непоследовательным и лишенным полноты, что ограничивает пространство проектирования для мировых правил и оказывает давление на создателей мира, чтобы они не сбивали с толку пользователей; ограничение распространения причинно-следственных связей в мире, если действия одной области не может иметь последствий в отдаленных областях, пространство между ними застыло во времени. Размер области, в которой применяются физические правила, является важным фактором проектирования, который будет влиять на ресурсы, необходимые миру, и уровень удовольствия, которого он может достичь.

Строим виртуальный мир: как использовать технологию блокчейн, чтобы не отставать от «цифровых богов»?

Чтобы создать интересный и привлекательный виртуальный мир, необходимо тщательно сбалансировать вычислительную эффективность и удовольствие. Это включает в себя решение, какой тип времени использовать (синхронный или асинхронный) и оценку формы законов физики, которые управляют миром. Еще одним важным решением является размер области, к которой применяются законы физики. Тщательно делая этот выбор, создатели мира могут не только сохранить интерес к управлению вычислительной нагрузкой мира, но и предоставить другим разработчикам очень плодородную базу для инноваций.

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • комментарий
  • Поделиться
комментарий
0/400
Нет комментариев
  • Закрепить