Я пытаюсь реализовать функцию, которая распознает кошелек metamask, и в конечном итоге соединяется с приложением, чтобы пользователь мог просто зарегистрироваться или войти в систему с помощью логина metamask. Подобно тому, как работает opensea sign up / login.
- metamask api: https://docs.metamask.io/guide/getting-started.html#basic-considerations, https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents
1. Оригинальный код
Я следовал этому коду в README.md из MetaMask/detect-provider
Изначально я работаю в режиме HTML/Javascript (пока не nodejs), чтобы сначала протестировать простые функции. И пример HTML кода в README из репозитория выдавал ошибку.
2. ошибка
await is only valid in async functions and the top level bodies of modules
3. Решение
Исправление — Ошибка Await допустима только в async-функции в NodeJS
Как объясняется в блоге, ошибка возникала из-за использования await верхнего уровня без настройки. Это требовало изменения type= module
в package.json
или теге script.
Таким образом, HTML-код в файле README.md должен выглядеть следующим образом
<script src="https://unpkg.com/@metamask/detect-provider/dist/detect-provider.min.js"></script>
<script type="module">
const provider = await detectEthereumProvider()
if (provider) {
// handle provider
} else {
// handle no provider
}
</script>