Skip to content

Instantly share code, notes, and snippets.

@mgild
Created July 25, 2022 16:16
Show Gist options
  • Save mgild/e40d0b0739ed755b129a6fe6064f274d to your computer and use it in GitHub Desktop.
Save mgild/e40d0b0739ed755b129a6fe6064f274d to your computer and use it in GitHub Desktop.
class AptosEvent {
constructor(
readonly client: AptosClient,
readonly eventHandlerOwner: HexString,
readonly eventOwnerStruct: string,
readonly eventHandlerName: string,
readonly pollIntervalMs: number = 1000
) {}
async onTrigger(callback: (e: any) => any) {
// Get the start sequence number in the EVENT STREAM, defaulting to the latest event.
const [{ sequence_number }] = await this.client.getEventsByEventHandle(
this.eventHandlerOwner,
this.eventOwnerStruct,
this.eventHandlerName,
{ limit: 1 }
);
// type for this is string for some reason
let lastSequenceNumber = sequence_number;
setInterval(async () => {
const events = await this.client.getEventsByEventHandle(
this.eventHandlerOwner,
this.eventOwnerStruct,
this.eventHandlerName,
{
start: Number(lastSequenceNumber) + 1,
limit: 500,
}
);
if (events.length !== 0) {
// increment sequence number
lastSequenceNumber = events.at(-1)!.sequence_number;
}
for (let e of events) {
// fire off the callback for all new events
await callback(e);
}
}, this.pollIntervalMs);
}
}
@ahermida
Copy link

const onAggregatorOpenRound = (
  client: AptosClient,
  cb: EventCallback,
  pollIntervalMs: number = 1000
) => {
  const event = new AptosEvent(
    client,
    HexString.ensure(SWITCHBOARD_STATE_ADDRESS),
    `${SWITCHBOARD_DEVNET_ADDRESS}::Switchboard::State`,
    "aggregator_open_round_events",
    pollIntervalMs
  );
  event.onTrigger(cb);
  return event;
};

const onAggregatorUpdate = (
  client: AptosClient,
  cb: EventCallback,
  pollIntervalMs: number = 1000
) => {
  const event = new AptosEvent(
    client,
    HexString.ensure(SWITCHBOARD_STATE_ADDRESS),
    `${SWITCHBOARD_DEVNET_ADDRESS}::Switchboard::State`,
    "aggregator_update_events",
    pollIntervalMs
  );
  event.onTrigger(cb);
  return event;
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment