Исходный код контракта: POGToken.sol
Реализовано на Go в директории client.
Необходимые env:
- PRIVATE_KEY — приватный ключ тестовой сети
- INFURA_URL — секретный URL infura с API токеном
- CONTRACT_ADDRESS — адрес контракта в сети для взаимодействия
В директории client можно выполнить следующие команды:
go run . -- add <address> <username>
— добавить пользователяgo run . -- remove <address>
— удалить существующего пользователяgo run . -- logs add
— посмотреть лог добавленийgo run . -- logs remove
— посмотреть лог удалений
[$] go run . -- add 0xD727259569e631AD36d12b9C18cd754b69A8C4de blockchain
viewer has been added: 0xe22ad90a418314fb8bdd14066f3cdcc0952a8fff23247da6400d317d8d3deddc
[$] go run . -- logs add
[0xD727259569e631AD36d12b9C18cd754b69A8C4de] New viewer added:
- address: 0xB87e1B6A462660E26Ec8913513aB86b084A4F46c
- username: lodthe
[0xD727259569e631AD36d12b9C18cd754b69A8C4de] New viewer added:
- address: 0xD727259569e631AD36d12b9C18cd754b69A8C4de
- username: lodtheeee
[0xD727259569e631AD36d12b9C18cd754b69A8C4de] New viewer added:
- address: 0xD727259569e631AD36d12b9C18cd754b69A8C4de
- username: blockchain
[$] go run . -- remove 0xD727259569e631AD36d12b9C18cd754b69A8C4de
viewer has been removed: 0xfd5d2205514f44fecc73e1b6cd6e5052ac5c32f99582f06a4a8096386f34cb11
[$] go run . -- logs remove
[0xD727259569e631AD36d12b9C18cd754b69A8C4de] A viewer has been removed:
- address: 0xD727259569e631AD36d12b9C18cd754b69A8C4de
- username: blockchain
-
Кошельки: MetaMask, Trust Wallet, Opera, ZenGo Wallet, CoinBase Wallet.
-
Обозреватели: EtherScan, BlockScout.
-
Удобный оступ к блокчейну через API: Infura.
MetaMask встраивает javascript библиотеку web3js, к которой обращается веб-приложение. Также MetaMask хранит в local storage браузера аутентификационные данные, чтобы взаимодействовать с блокчейном через json-rpc.
Каким образом обрабатываются пользовательские данные в web-приложении, чтобы они были приняты блокчейном?
Чтобы пользовательские данные могли быть приняты блокчейном, они должны быть закодированы в виде байтового кода, который соответствует стандарту ABI (Application Binary Interface). Стандарт ABI определяет, как функции и переменные в смарт-контракте должны быть представлены в виде байтового кода.
Логика кодирования в ABI как правило находится в библиотеке, которая может получать ABI контракта напрямую из сети, и в соответствии с данным ABI "запаковывать данные".
Отправка транзакций / прочие базовые функции реализуются через готовый общий интерфейс.
Со стороны клиента есть следующие варианты:
- Веб-приложения (которые часто базируются на js-библиотеках)
- Command line утилиты
- SDK для разных языков программирования
Однако внутри как правило все равно лежит общение либо через RPC, либо через нативный протокол. Различные варианты отличаются по удобности и своей эффективности. Если необходимо разрабатывать вебприложение, подойдёт аналог web3js. Если необходимо выполнять логику где-то на бэкенде, лучшим вариантом будет SDK.
Есть следующие источники информации:
-
Чтение состояния контракта открыто, и нем может содержаться полезная информация (например, балансы ERC20)
-
Получение баланса кошелька
-
Получение блоков блокчейна и содержащихся в них транзакциях
Получить их как правило можно либо через нативный протокол блокчейна, либо через RPC (например, json-rpc в Ethereum).