Как найти всех держателей токенов?

Например, контракт сохраняет адрес при создании токена, но после этого держатель токена может отправить токен или все токены на другой кошелек.

Можно ли найти все адреса кошельков держателей токенов, которые были созданы по моему контракту?

очень круто .. Любой пример «IDS IN ARRAY» вместе с функцией get, чтобы их увидеть?? Я не настолько хорошо разбираюсь в картографии, что не могу разобраться в этом.

Ответы (3)

Все передачи токенов выполняются путем вызова методов вашего контракта, поэтому ваш контракт может отслеживать балансы и счета любым удобным для него способом. Если вы используете механизм Solidity по умолчанию mapping, вам также потребуется сохранить отдельный список известных идентификаторов учетных записей в массиве, чтобы вы могли перебирать их.

Как попасть на внешний контракт?

Я создал автономный инструмент с открытым исходным кодом, который делает то же самое.

  • Взять адрес контракта токена

  • Перебрать все Transferсобытия ERC-20 для токена с помощью eth_getLogsJSON-RPC API.

  • Создайте локальную базу данных этих событий

  • Позволяет использовать SQL для запроса любого баланса счета в любой момент времени (номер блока) — обратите внимание, что некоторые балансы могут стать равными нулю.

Вы можете найти приложение командной строки, как создать базу данных здесь.

Основная логика Python здесь .

Здесь и там есть некоторые причуды: например, обнаружение события чеканки/создания для некоторых токенов не является простым. Таким образом, вы можете получить отрицательный баланс на счете, получающем первоначальное общее предложение, если вы полагаетесь Transferтолько на событие.

Хотите знать, работает ли это все еще, поскольку я вижу, что страница документов теперь дает 404, docs.tokenmarket.net/erc-20-holders.html ?

Вы можете наблюдать за событием, когда оно происходит в приложении или в самом контракте токена:

mapping (uint => mapping (address => uint)) mappedAccounts;
Это не определение события или генератор событий. Ваш ответ сбивает с толку. Возможно, вы могли бы добавить дополнительную информацию.
Я думаю, что он имел в виду какой-то инвертированный индекс, например, mapping (address => uint)а затем mapping (uint => address)отслеживать адреса, как сказал Ник Джонсон.