Получить все учетные записи, которые взаимодействовали с контрактом

Помимо циклического прохождения каждой транзакции с момента майнинга контракта, существует ли способ удобно получить каждую учетную запись, которая взаимодействовала с контрактом (или отправила транзакцию на адрес), используя стандартный API web3, который будет работать для всех браузеров (Mist/Metamask). /паритет)?

Ответы (1)

Я столкнулся с точно такой же проблемой, и самым простым решением, которое я нашел, было использование функции четности trace :

web3.trace.filter({"fromBlock": "STARTING_BLOCK_NUMBER", "toAddress": [YOUR_CONTRACT_ADDRESS]}

Не забудьте запустить четность в режиме архива, чтобы иметь возможность воспользоваться преимуществами дополнительной индексации хранилища:

parity --tracing on --pruning archive
Хорошо, но есть ли способ сделать это с помощью стандартного API, который также будет работать с Metamask/Mist?
Да, но это очень неэффективно, так как требует просмотра всех транзакций. Вот почему паритет добавил индексацию в режиме трассировки для ускорения поиска.
Это то, чего я опасался, было бы здорово, если бы эта функциональность была добавлена ​​​​в общий API.
@SamuelBarnes У Якуба есть причина, по которой общий API действительно неэффективен, и у вас будет много проблем с асинхронными функциями и функциями фильтров API. Попробуйте использовать его или другой внешний API, например, etherscan.io.
Централизованные API @Gawey никуда не годятся, вопрос заключается в том, есть ли способ без зацикливания. Мы понимаем, что нет. Я нашел решение для своего варианта использования, которое включает изменение дизайна контракта, но, к сожалению, это решение зависит от обстоятельств контракта.