Зачем нам нужна функция startWatching от WalletApi?
В plutus Playground в примере игры есть функция
-- | The "startGame" contract endpoint, telling the wallet to start watching
-- the address of the game script. See note [Contract endpoints]
startGame :: MonadWallet m => m ()
startGame =
-- 'startWatching' is a function of the wallet API. It instructs the wallet
-- to keep track of all outputs at the address. Player 2 needs to call
-- 'startGame' before Player 1 uses the 'lock' endpoint, to ensure that
-- Player 2's wallet is aware of the game address.
startWatching gameAddress
Мне не нравится
Player 2 needs to call
'startGame' before Player 1 uses the 'lock' endpoint, to ensure that
Player 2's wallet is aware of the game address.
Неужели нет возможности подключиться к игре после запуска игры (lock
функция называется)?
Нужна ли вообще эта функция? Можем ли мы пойти только сguess
а также lock
функции?
Я могу понять как startWatching
может иметь смысл для легких кошельков / клиентов (которые используют доказательства Меркла для проверки транзакций), но не понимают, как startGame
Функция может быть полезна для полных клиентов. (На самом деле я этого не делаю, легкий клиент все еще должен иметь возможность запрашивать информацию из других нужд)
1 ответ
Как вы правильно заявили, причина, по которой startWatching
Это связано с возможностями кошельков, к которым контракты Plutus имеют доступ.
В первой итерации эмулятора мы исходили из консервативного предположения, что контракты Plutus смогут выполнять только перспективные запросы состояния блокчейна. То есть мы предположили, что сканировать произвольные участки блокчейна будет невозможно из-за ограничений ресурсов некоторых кошельков. Эффект заключается в том, что все контракты, написанные для этого ограничительного интерфейса кошелька, должны вызыватьstartWatching
прежде чем они смогут сделать что-нибудь интересное.
Когда был реализован эмулятор, не было спецификации возможностей кошелька, на которые могут рассчитывать контракты Plutus - фактически, одной из мотиваций для создания эмулятора было помочь нам написать спецификацию. И вполне вероятно, что текущий ограничительный интерфейс (только перспективные запросы) будет заменен чем-то более мощным, чтобыstartGame
конечная точка больше не понадобится.