instadapp-dsa-subgraph/src/mappings/instaConnectors.ts
2020-06-03 12:01:36 -03:00

143 lines
4.7 KiB
TypeScript

import {
LogDisable,
LogEnable,
LogEnableStatic,
LogAddController,
LogRemoveController
} from "../../generated/templates/InstaConnectors/InstaConnectors";
import { LogEvent } from "../../generated/InstaEvents/InstaEvents";
import { InstaList } from "../../generated/InstaEvents/InstaList";
import { log, Address } from "@graphprotocol/graph-ts";
import { Connector as ConnectorContract } from "../../generated/templates/InstaConnectors/Connector";
import {
getOrCreateConnector,
getOrCreateChief,
getOrCreateConnectorEvent,
getOrCreateInstaIndex
} from "../utils/helpers";
// - event: LogDisable(indexed address)
// handler: handleLogDisableConnector
export function handleLogDisableConnector(event: LogDisable): void {
let contract = ConnectorContract.bind(event.params.connector);
let connectorIDResult = contract.connectorID();
let instaConnectorAddress = event.address.toHexString();
let entityId = connectorIDResult.value1
.toString()
.concat("-")
.concat(connectorIDResult.value0.toString());
let connector = getOrCreateConnector(entityId);
connector.isEnabled = false;
connector.instaConnector = event.address.toHexString();
connector.name = contract.name();
connector.address = event.params.connector
connector.connectorType = connectorIDResult.value0;
connector.connectorID = connectorIDResult.value1;
connector.save();
}
// - event: LogEnable(indexed address)
// handler: handleLogEnableConnector
export function handleLogEnableConnector(event: LogEnable): void {
let contract = ConnectorContract.bind(event.params.connector);
let connectorIDResult = contract.connectorID();
let instaConnectorAddress = event.address.toHexString();
let entityId = connectorIDResult.value1
.toString()
.concat("-")
.concat(connectorIDResult.value0.toString());
let connector = getOrCreateConnector(entityId);
connector.isEnabled = true;
connector.isStatic = false;
connector.instaConnector = event.address.toHexString();
connector.name = contract.name();
connector.address = event.params.connector;
connector.connectorType = connectorIDResult.value0;
connector.connectorID = connectorIDResult.value1;
connector.save();
}
// - event: LogEnableStatic(indexed address)
// handler: handleLogEnableStaticConnector
export function handleLogEnableStaticConnector(event: LogEnableStatic): void {
let contract = ConnectorContract.bind(event.params.connector);
let connectorIDResult = contract.connectorID();
let instaConnectorAddress = event.address.toHexString();
let entityId = connectorIDResult.value1
.toString()
.concat("-")
.concat(connectorIDResult.value0.toString());
let connector = getOrCreateConnector(entityId);
connector.isEnabled = true;
connector.isStatic = true;
connector.instaConnector = instaConnectorAddress;
connector.name = contract.name();
connector.address = event.params.connector;
connector.connectorType = connectorIDResult.value0;
connector.connectorID = connectorIDResult.value1;
connector.save();
}
// - event: LogAddController(indexed address)
// handler: handleLogAddController
export function handleLogAddController(event: LogAddController): void {
let chief = getOrCreateChief(event.params.addr.toHexString());
chief.isActive = true;
chief.instaConnector = event.address.toHexString();
chief.save();
}
// - event: LogRemoveController(indexed address)
// handler: handleLogRemoveController
export function handleLogRemoveController(event: LogRemoveController): void {
let chief = getOrCreateChief(event.params.addr.toHexString());
chief.isActive = false;
chief.instaConnector = event.address.toHexString();
chief.save();
}
// - event: LogEvent(uint64,indexed uint64,indexed uint64,indexed bytes32,bytes)
// handler: handleLogEvent
export function handleLogEvent(event: LogEvent): void {
let entityId = event.params.connectorID
.toString()
.concat("-")
.concat(event.params.connectorType.toString());
let connector = getOrCreateConnector(entityId, false);
if (connector == null) {
log.error("Connector '{}' doesn't exist.", [entityId]);
} else {
let index = getOrCreateInstaIndex();
let instaListContract = InstaList.bind(index.instaListAddress as Address);
let accountAddress = instaListContract.accountAddr(event.params.accountID);
let eventId = event.transaction.hash
.toHexString()
.concat("-")
.concat(event.logIndex.toString());
let connectorEvent = getOrCreateConnectorEvent(eventId);
connectorEvent.account = accountAddress.toHexString();
connectorEvent.connector = connector.id;
connectorEvent.eventCode = event.params.eventCode;
connectorEvent.eventData = event.params.eventData;
connectorEvent.save();
}
}