Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,858 changes: 2,564 additions & 294 deletions packages/managed-oracle-v2/abis/ManagedOracleV2.json

Large diffs are not rendered by default.

406 changes: 406 additions & 0 deletions packages/managed-oracle-v2/abis/ManagedOracleV2Legacy.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,13 @@
- PriceIdentifier
- CustomLiveness
- CustomBond
- Resolver
- ResolverHistory
abis:
- name: ManagedOracleV2
file: ./abis/ManagedOracleV2.json
- name: ManagedOracleV2Legacy
file: ./abis/ManagedOracleV2Legacy.json
eventHandlers:
- event: RequestPrice(indexed address,bytes32,uint256,bytes,address,uint256,uint256)
handler: handleOptimisticRequestPrice
Expand All @@ -31,6 +35,10 @@
handler: handleCustomLivenessSet
- event: CustomBondSet(indexed bytes32,address,indexed bytes32,bytes,indexed address,uint256)
handler: handleCustomBondSet
- event: RoleGranted(indexed bytes32,indexed address,indexed address)
handler: handleRoleGranted
- event: RoleRevoked(indexed bytes32,indexed address,indexed address)
handler: handleRoleRevoked
callHandlers:
- function: setCustomLiveness(bytes32,uint256,bytes,uint256)
handler: handleSetCustomLiveness
Expand Down
32 changes: 32 additions & 0 deletions packages/managed-oracle-v2/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,35 @@ type CustomLiveness @entity {

customLiveness: BigInt!
}

type Resolver @entity {
"ID is the resolver address"
id: ID!

address: Bytes!

isActive: Boolean!

addedAt: BigInt

addedTx: Bytes

removedAt: BigInt

removedTx: Bytes
}

type ResolverHistory @entity {
"ID is tx hash + log index"
id: ID!

resolver: Bytes!

action: String!

timestamp: BigInt!

blockNumber: BigInt!

transactionHash: Bytes!
}
2 changes: 1 addition & 1 deletion packages/managed-oracle-v2/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ export {
handleSetCustomLiveness,
handleSetEventBased,
} from "./mappings/optimisticOracleV2";
export { handleCustomBondSet, handleCustomLivenessSet } from "./mappings/managedOracleV2";
export { handleCustomBondSet, handleCustomLivenessSet, handleRoleGranted, handleRoleRevoked } from "./mappings/managedOracleV2";
64 changes: 61 additions & 3 deletions packages/managed-oracle-v2/src/mappings/managedOracleV2.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import { log } from "@graphprotocol/graph-ts";
import { CustomBond, CustomLiveness } from "../../generated/schema";
import { CustomBondSet, CustomLivenessSet } from "../../generated/ManagedOracleV2/ManagedOracleV2";
import { log, Bytes, crypto } from "@graphprotocol/graph-ts";
import { CustomBond, CustomLiveness, Resolver, ResolverHistory } from "../../generated/schema";
import { CustomBondSet, CustomLivenessSet, RoleGranted, RoleRevoked } from "../../generated/ManagedOracleV2/ManagedOracleV2";
import { createCustomBondIdFromEvent } from "../utils/helpers/managedOracleV2";

// RESOLVER_ROLE = keccak256("RESOLVER_ROLE")
const RESOLVER_ROLE = Bytes.fromHexString("0x92a19c77d2ea87c7f81d50c74403cb2f401780f3ad919571121efe2bdb427eb1");

/**
* Handles CustomBondSet events from the ManagedOracleV2 contract.
*
Expand Down Expand Up @@ -48,3 +51,58 @@ export function handleCustomLivenessSet(event: CustomLivenessSet): void {
entity.customLiveness = event.params.customLiveness;
entity.save();
}

export function handleRoleGranted(event: RoleGranted): void {
if (event.params.role != RESOLVER_ROLE) return;

const id = event.params.account.toHexString();
let resolver = Resolver.load(id);

if (resolver == null) {
resolver = new Resolver(id);
resolver.address = event.params.account;
}

resolver.isActive = true;
resolver.addedAt = event.block.timestamp;
resolver.addedTx = event.transaction.hash;
resolver.save();

// Create history entry
const historyId = event.transaction.hash.toHexString() + "-" + event.logIndex.toString();
let history = new ResolverHistory(historyId);
history.resolver = event.params.account;
history.action = "added";
history.timestamp = event.block.timestamp;
history.blockNumber = event.block.number;
history.transactionHash = event.transaction.hash;
history.save();

log.info("Resolver added: {}", [id]);
}

export function handleRoleRevoked(event: RoleRevoked): void {
if (event.params.role != RESOLVER_ROLE) return;

const id = event.params.account.toHexString();
let resolver = Resolver.load(id);

if (resolver != null) {
resolver.isActive = false;
resolver.removedAt = event.block.timestamp;
resolver.removedTx = event.transaction.hash;
resolver.save();
}

// Create history entry
const historyId = event.transaction.hash.toHexString() + "-" + event.logIndex.toString();
let history = new ResolverHistory(historyId);
history.resolver = event.params.account;
history.action = "removed";
history.timestamp = event.block.timestamp;
history.blockNumber = event.block.number;
history.transactionHash = event.transaction.hash;
history.save();

log.info("Resolver removed: {}", [id]);
}
43 changes: 33 additions & 10 deletions packages/managed-oracle-v2/src/mappings/optimisticOracleV2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,13 @@ import {
SetEventBasedCall,
Settle,
} from "../../generated/ManagedOracleV2/ManagedOracleV2";
import { ManagedOracleV2Legacy } from "../../generated/ManagedOracleV2/ManagedOracleV2Legacy";
import { createOptimisticPriceRequestId, getManagedRequestId, getOrCreateOptimisticPriceRequest } from "../utils/helpers";
import { CustomBond, CustomLiveness } from "../../generated/schema";

import { Address, BigInt, Bytes, dataSource, log } from "@graphprotocol/graph-ts";
import { createCustomBondId } from "../utils/helpers/managedOracleV2";

let network = dataSource.network();

let isMainnet = network == "mainnet";
let isGoerli = network == "goerli";

/**
* Retrieves a custom bond entity if one exists for the given parameters.
*
Expand Down Expand Up @@ -84,6 +80,10 @@ function getState(
// );

export function handleOptimisticRequestPrice(event: RequestPrice): void {
let network = dataSource.network();
let isMainnet = network == "mainnet";
let isGoerli = network == "goerli";

log.warning(`(ancillary) OOV2 PriceRequest params: {},{},{}`, [
event.params.timestamp.toString(),
event.params.identifier.toString(),
Expand Down Expand Up @@ -121,15 +121,38 @@ export function handleOptimisticRequestPrice(event: RequestPrice): void {
// see readme for more info
if (!isMainnet && !isGoerli) {
let oov2 = ManagedOracleV2.bind(event.address);
let requestSettings = oov2.try_getRequest(
let result = oov2.try_getRequest(
event.params.requester,
event.params.identifier,
event.params.timestamp,
event.params.ancillaryData
).value.requestSettings;
request.bond = requestSettings.bond;
request.eventBased = requestSettings.eventBased;
request.customLiveness = requestSettings.customLiveness;
);

if (!result.reverted) {
// New ABI succeeded
let requestSettings = result.value.requestSettings;
request.bond = requestSettings.bond;
request.eventBased = requestSettings.eventBased;
request.customLiveness = requestSettings.customLiveness;
} else {
// Try legacy ABI (for contracts not yet upgraded)
let oov2Legacy = ManagedOracleV2Legacy.bind(event.address);
let legacyResult = oov2Legacy.try_getRequest(
event.params.requester,
event.params.identifier,
event.params.timestamp,
event.params.ancillaryData
);

if (!legacyResult.reverted) {
let requestSettings = legacyResult.value.requestSettings;
request.bond = requestSettings.bond;
request.eventBased = requestSettings.eventBased;
request.customLiveness = requestSettings.customLiveness;
} else {
log.warning("Both new and legacy getRequest calls failed for request {}", [requestId]);
}
}
}

// Look up custom bond and liveness values that may have been set before the request
Expand Down
Loading