Например, контракт сохраняет адрес при создании токена, но после этого держатель токена может отправить токен или все токены на другой кошелек.
Можно ли найти все адреса кошельков держателей токенов, которые были созданы по моему контракту?
Все передачи токенов выполняются путем вызова методов вашего контракта, поэтому ваш контракт может отслеживать балансы и счета любым удобным для него способом. Если вы используете механизм Solidity по умолчанию mapping
, вам также потребуется сохранить отдельный список известных идентификаторов учетных записей в массиве, чтобы вы могли перебирать их.
Я создал автономный инструмент с открытым исходным кодом, который делает то же самое.
Взять адрес контракта токена
Перебрать все Transfer
события ERC-20 для токена с помощью eth_getLogs
JSON-RPC API.
Создайте локальную базу данных этих событий
Позволяет использовать SQL для запроса любого баланса счета в любой момент времени (номер блока) — обратите внимание, что некоторые балансы могут стать равными нулю.
Вы можете найти приложение командной строки, как создать базу данных здесь.
Основная логика Python здесь .
Здесь и там есть некоторые причуды: например, обнаружение события чеканки/создания для некоторых токенов не является простым. Таким образом, вы можете получить отрицательный баланс на счете, получающем первоначальное общее предложение, если вы полагаетесь Transfer
только на событие.
Вы можете наблюдать за событием, когда оно происходит в приложении или в самом контракте токена:
mapping (uint => mapping (address => uint)) mappedAccounts;
mapping (address => uint)
а затем mapping (uint => address)
отслеживать адреса, как сказал Ник Джонсон.
пользователь3252381