События фильтра Web3.js

Моему Dapp необходимо динамически развертывать контракты. Таким образом, мне нужно где-то хранить адреса этих контрактов, и я выбрал следующее решение:

  1. Событие создания журнала
  2. Получение контрактов на основе журналов

Фрагмент, который выполняет ведение журнала, таков:

event Created(address indexed _who, address indexed _to_whom, uint money, uint _max_duration);

//...

Created(msg.sender, _to_address, money_quantity, _contract_max_duration);

В web3.js мне трудно понять, как фильтровать журналы на основе: Contract Type , параметра _who и, в конечном итоге , параметра _to_whom .

Я получаю все журналы (в js):

var filter = web3.eth.filter({fromBlock:0, toBlock: 'latest', topics: [/* ????!!! */]});

filter.get(function(error, result) {
   console.log(result)
})

В консоли я получаю хэши 3 «тем», которые, как я предлагаю, путем обратного проектирования, являются хэшем типа контракта и двумя другими индексированными параметрами события.

Допустим, я хочу запросить все события типа Contract Type с текущим пользователем в качестве параметра _who . Как мне это сделать? Что вставить в topicsаргумент?

Большое спасибо

эй, чувак, у меня самого проблема с фильтрами, не мог бы ты проверить мой вопрос и посмотреть, есть ли у тебя какое-то понимание? эфириум.stackexchange.com/questions/22802/…

Ответы (1)

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

Прежде всего, я говорю вам, что в идеале было бы фильтровать именно тот блок, который является единственным, который дает мне результирующую обратную связь и не дает мне сбоев. Самым быстрым было бы использовать внешний журнал для сохранения транзакций и адресов.

Я также рекомендую вам посмотреть этот API , чтобы вы немного знали, как работать с этими темами.

Чай оставляю довольно полезную ссылку с случаем похожим на то, что вы пробуете. Связь

По вашему опыту, быстро ли искать только события из одного контракта или лучше перейти на Etherscan API? Потому что сейчас я думаю о создании этих динамических контрактов из одного контракта, жестко закодированного в приложении. Затем ищем события создания этого исходного контракта. Спасибо
Это быстрое использование Etherscan API, но это внешний API, поэтому... если вы хотите создать себе поисковик в блокчейне, лучше использовать внешний журнал для сохранения результатов, а затем выполнять поиск в этом журнале, потому что это быстрее, чем использовать фильтр. Возможно, в будущем функции этого фильтра станут лучше...
Хорошо спасибо. Я проверю эти параметры при развертывании в основной сети.