Можно ли генерировать событие в функции просмотра (через событие или логи)? Или можно вернуть значение в javascript без (до) майнинга в функции транзакции? Моя цель — избежать ожидания из-за майнинга с ведением журнала событий.
Можно ли генерировать событие в функции просмотра (через событие или логи)?
Поскольку журналы событий хранятся в квитанциях о транзакциях, я не верю, что можно сгенерировать событие в функции просмотра, поскольку транзакция не происходит.
Или можно вернуть значение в javascript без (до) майнинга в функции транзакции?
Я тоже не думаю, что это возможно. Возвращаемое значение функции, создающей транзакцию, будет квитанцией транзакции. В квитанции вы можете найти любые события, которые были сгенерированы этой функцией.
Q1: Событие — это изменение состояния. Их невозможно испускать из view
или pure
функций или constant
в старом синтаксисе.
Q2: невозможно получить значения ответа из подписанной транзакции. Вы всегда получите квитанцию об операции.
К шаблонам нужно привыкнуть. Я большой сторонник создания проверяемых журналов событий для каждого важного изменения состояния. Когда транзакции анализируются, соответствующая информация поступает с подтверждением в качестве аргументов журнала событий. Это для клиентов вне сети.
Значения return
или по-прежнему важны. Это значения ответа, если функция вызывается из другой функции или контракта.
Например:
bool result = myOtherContract.insertSomething(); // expecting "true"/success
Если это важно для клиента, что-то вроде:
emit LogResult(msg.sender, result);
Надеюсь, поможет.
Первый вопрос: это невозможно, потому что событие изменяет состояние. В Remix вы увидите предупреждение об этом.
Второй вопрос. Вы можете выполнить функции локально, не отправляя транзакцию в сеть с помощью Call, она не будет потреблять газ и будет выполнена немедленно.
Однако, если вы стремитесь получить транзакции, совершенные пользователями вашей системы, до того, как транзакции будут добыты, это невозможно.
Надеюсь это поможет
Начикет тапас
Хайме
Начикет тапас