TypeScript icon, indicating that this package has built-in type declarations

0.0.5 • Public • Published

Event Listener

@completium/event-listener detects events emitted by smart contracts on the Tezos blockchain, and executes registered event handler functions.



Registers an event handler for a specific contract. It takes 3 arguments:

  • the address of the emitter contract
  • the function to create an event from its packed version
  • the event handler function that takes 2 arguments:
    • the emitted event
    • the event data (optional)

The function to create the event may be automatically generated (see Bindings below).

The event data provides information about the emitted event:

  • date
  • block hash
  • operation hash
  • source of the event (account address at the source of the event emission)


Starts the listener process. It takes an optional EventListenerOptions object with optional fields:

Field Type Default Desc
bottom string head~4 block hash to start crawling from
delay number 2000 number of milliseconds between two lookups of the event well contract
horizon number 3 number of blocks to look back (the higher, the higher the probability to read the main branch)
endpoint string https://mainnet.api.tez.ie endpoint used by the event crank
verbose boolean false flag to turn crank's verbose mode on/off


Stops the event listener.


@completium/completium-cli generates the TS bindings from an Archetype contract. It generates for each event emitted by a contract:

  • the event type
  • the register event function

The completium CLI command to generate the bindings:

$ completium-cli generate bindings-ts mycontract.arl > mycontract-bindings.ts


This example illustrates how to emit event from a smart contract and how to receive them in a Dapp.

Emit event

Declare the event type with the event declaration and emit an event with the emit instruction:

archetype event_demo

event TestEvent {
  val: string

entry emit_event(v : string) {
  if length(v) > 20 then
    emit<TestEvent>({ val })

Deploy the contract on the testnet with the following command:

$ completium-cli set endpoint https://ithacanet.ecadinfra.com
$ completium-cli deploy event_demo.arl

Receive event

Generate bindings with the following command:

$ completium-cli generate bindings-ts event_demo > bindings-event_demo.ts

It generates the following two elements:

  • EventDemo
  • register_TestEvent

These elements may be used to implement the event receiver application which registers an event handler and starts the cranks. Say the event demo contract deployed above is at address KT19EAMugKU416cbA9jL1XcukWArfpv4dLYA

import { runCrank } from '@completium/event-listener';
import { register_TestEvent, TestEvent } from './bindings-event_demo';

const handleTestEvent = (e : TestEvent) => {
  console.log(`Test Event received with value "${e.val}"!`);

const run = async () => {
  register_TestEvent('KT19EAMugKU416cbA9jL1XcukWArfpv4dLYA', handleTestEvent);
    endpoint: 'https://ithacanet.ecadinfra.com',

await run()


Compile and run the application above. Then call the contract with the following command:

$ completium-cli call event_demo --arg `{ "v" : "This is a long enough string." }`

After a few blocks generation, the application prints the following message:

Test Event received with value "This is a long enough string."!

Package Sidebar


npm i @completium/event-listener

Weekly Downloads






Unpacked Size

23.7 kB

Total Files


Last publish


  • guillaumeedukera
  • benoitedukera