Как прослушивать контрактные события в Drizzle

Давайте возьмем пример SimpleStorageконтракта, который идет с коробкой для трюфелей.drizzle-box

Как мы можем прослушать событие StorageSetи console.logпередать его в консоль JS?

drizzleOptions.js

import SimpleStorage from './../build/contracts/SimpleStorage.json'

const drizzleOptions = {
web3: {
    block: false,
    fallback: {
    type: 'ws',
    url: 'ws://127.0.0.1:8545'
    }
},
contracts: [
    SimpleStorage
],
events: {
    SimpleStorage: ['StorageSet'],
},
polls: {
    accounts: 1500
}
}

export default drizzleOptions

Ответы (2)

Я предполагаю, что вы используете Metamask, поэтому проблема может заключаться в следующем: «Текущий провайдер не поддерживает подписки: MetamaskInpageProvider» .

Я также не вижу этого сообщения об ошибке, так как морось не печатает его. Вы можете посмотреть здесь . Таким образом, вы сможете протестировать подписку на события самостоятельно/вручную. Что-то подобное:

drizzle.contracts.SimpleStorage.events
    .StorageSet({/* eventOptions */}, (error, event) => {
        console.log(error, event);
    })
    .on('data', (event) => console.log(event))
    .on('changed', (event) => console.log(event))
    .on('error', (error) => console.log(error));

Здесь вы можете найти документацию по событиям web3.

При желании вы можете проверить события в квитанции о транзакции.

Я действительно могу воспроизвести это. Интересно, насколько drizzle полезен в продакшене, где у вас в качестве провайдера только ММ? Ты нашел решение, @мариус?

Я пытаюсь сделать нечто подобное, но, насколько я понимаю, Drizzle еще не поддерживает это. Вот проблема, которую я нашел для ее отслеживания: https://github.com/trufflesuite/drizzle/issues/147 .