Я разрабатываю игру, которая в настоящее время использует контракт GameFactory для создания экземпляров контракта Game. Шаблон Factory позволит любому количеству игроков играть в свою собственную одиночную игру, а игровые данные будут храниться в отдельных экземплярах Game.
Однако в идеале мне нужны контракты Game для взаимодействия с контрактами GameFactory для обновления глобальных рекордов и статистики обо всех играх, в которые в данный момент играют.
Что было бы хорошим способом добиться этого? Существуют ли какие-либо существующие примеры шаблонов для подобных децентрализованных игр?
Расположение ступицы и спицы имеет преимущества, как и монолитный контракт.
Концентратор и спица
Монолитный
Работа на основе Hub and Spoke, естественно, приводит к некоторым общим проблемам. Как вы упомянули, вероятно, спицам необходимо обновить глобальные переменные в концентраторе, а концентратору необходимо ограничить доступ к определенным функциям, чтобы это было разрешено только споку, и т. д.
Мои исследования привели меня к созданию обобщенных контрактов, примерно:
contract Hub is Deployer { ...
contract Spoke is Deployed { ...
Учтите, что Deployer отслеживает развернутые Spokes и выполняет такие действия, как:
modifier onlyDeployed { // only trust contracts made by this Hub
... и Deployed делает такие вещи, как запоминание Хаба, который его породил.
Если вы хотите иметь возможность обновить логику игры, вы можете рассмотреть возможность дальнейшего разделения данных Hub и логики Factory. То есть вы хотите иметь возможность хранить глобальные данные в контракте, который, как ожидается, не изменится, при этом периодически заменяя контракт, который развертывает новые игры.
Самая низкая стоимость газа и самый простой подход — это монолитный контракт с игровыми данными, объединенными в структуры, и без возможности обновления.
Надеюсь, поможет.
Иесбус
кукоцу
пользователь19510
пользователь19510