mirror of
https://github.com/luxfi/uma.git
synced 2026-07-27 05:11:41 +00:00
feat(monitor-v2): add ui links in og and oov3 monitors (#4544)
Signed-off-by: Reinis Martinsons <reinis@umaproject.org>
This commit is contained in:
committed by
GitHub
parent
8d018ea105
commit
cb7bf27dc0
@@ -1,4 +1,4 @@
|
||||
import { Logger, MonitoringParams, runQueryFilter, getOg } from "./common";
|
||||
import { Logger, MonitoringParams, runQueryFilter, getOg, getOo } from "./common";
|
||||
import { logProposalDeleted, logProposalExecuted, logSetCollateralAndBond, logSetRules } from "./MonitorLogger";
|
||||
import {
|
||||
logSetIdentifier,
|
||||
@@ -10,7 +10,14 @@ import {
|
||||
|
||||
export async function monitorTransactionsProposed(logger: typeof Logger, params: MonitoringParams): Promise<void> {
|
||||
const og = await getOg(params);
|
||||
const oo = await getOo(params);
|
||||
const transactions = await runQueryFilter(og, og.filters.TransactionsProposed(), params.blockRange);
|
||||
|
||||
const getAssertionEventIndex = async (assertionId: string): Promise<number> => {
|
||||
const assertionMade = await runQueryFilter(oo, oo.filters.AssertionMade(assertionId), params.blockRange);
|
||||
return assertionMade[0].logIndex; // There should only be one event matching unique assertionId.
|
||||
};
|
||||
|
||||
for (const transaction of transactions) {
|
||||
await logTransactions(
|
||||
logger,
|
||||
@@ -23,6 +30,7 @@ export async function monitorTransactionsProposed(logger: typeof Logger, params:
|
||||
rules: transaction.args.rules,
|
||||
challengeWindowEnds: transaction.args.challengeWindowEnds,
|
||||
tx: transaction.transactionHash,
|
||||
ooEventIndex: await getAssertionEventIndex(transaction.args.assertionId),
|
||||
},
|
||||
params
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { createEtherscanLinkMarkdown } from "@uma/common";
|
||||
import { BigNumber } from "ethers";
|
||||
import { Logger, tryHexToUtf8String } from "./common";
|
||||
import { generateOOv3UILink, Logger, tryHexToUtf8String } from "./common";
|
||||
|
||||
import type { MonitoringParams } from "./common";
|
||||
|
||||
@@ -15,6 +15,7 @@ export async function logTransactions(
|
||||
rules: string;
|
||||
challengeWindowEnds: BigNumber;
|
||||
tx: string;
|
||||
ooEventIndex: number;
|
||||
},
|
||||
params: MonitoringParams
|
||||
): Promise<void> {
|
||||
@@ -36,7 +37,10 @@ export async function logTransactions(
|
||||
". Explanation: " +
|
||||
tryHexToUtf8String(transaction.explanation) +
|
||||
". The proposal can be disputed till " +
|
||||
new Date(Number(transaction.challengeWindowEnds.toString()) * 1000).toUTCString(),
|
||||
new Date(Number(transaction.challengeWindowEnds.toString()) * 1000).toUTCString() +
|
||||
": " +
|
||||
generateOOv3UILink(transaction.tx, transaction.ooEventIndex, params.chainId) +
|
||||
".",
|
||||
notificationPath: "optimistic-governor",
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3,13 +3,14 @@ import { ERC20Ethers } from "@uma/contracts-node";
|
||||
import { delay } from "@uma/financial-templates-lib";
|
||||
import { utils } from "ethers";
|
||||
import { getContractInstanceWithProvider } from "../utils/contracts";
|
||||
import { OptimisticGovernorEthers } from "./common";
|
||||
import { OptimisticGovernorEthers, OptimisticOracleV3Ethers } from "./common";
|
||||
|
||||
import type { Provider } from "@ethersproject/abstract-provider";
|
||||
|
||||
export { OptimisticGovernorEthers } from "@uma/contracts-node";
|
||||
export { OptimisticGovernorEthers, OptimisticOracleV3Ethers } from "@uma/contracts-node";
|
||||
export { Logger } from "@uma/financial-templates-lib";
|
||||
export { getContractInstanceWithProvider } from "../utils/contracts";
|
||||
export { generateOOv3UILink } from "../utils/logger";
|
||||
|
||||
export interface BotModes {
|
||||
transactionsProposedEnabled: boolean;
|
||||
@@ -135,7 +136,7 @@ export const getCurrencySymbol = async (provider: Provider, currencyAddress: str
|
||||
};
|
||||
|
||||
export const runQueryFilter = async (
|
||||
contract: OptimisticGovernorEthers,
|
||||
contract: OptimisticGovernorEthers | OptimisticOracleV3Ethers,
|
||||
filter: any,
|
||||
blockRange: BlockRange
|
||||
): Promise<any> => {
|
||||
@@ -149,3 +150,7 @@ export const getOg = async (params: MonitoringParams): Promise<OptimisticGoverno
|
||||
params.ogAddress
|
||||
);
|
||||
};
|
||||
|
||||
export const getOo = async (params: MonitoringParams): Promise<OptimisticOracleV3Ethers> => {
|
||||
return await getContractInstanceWithProvider<OptimisticOracleV3Ethers>("OptimisticOracleV3", params.provider);
|
||||
};
|
||||
|
||||
@@ -8,6 +8,7 @@ export async function monitorAssertions(logger: typeof Logger, params: Monitorin
|
||||
await oo.queryFilter(oo.filters.AssertionMade(), params.blockRange.start, params.blockRange.end)
|
||||
).map(async (event) => ({
|
||||
tx: event.transactionHash,
|
||||
eventIndex: event.logIndex,
|
||||
assertionId: event.args.assertionId,
|
||||
claim: event.args.claim,
|
||||
assertionData: await oo.getAssertion(event.args.assertionId),
|
||||
|
||||
@@ -8,6 +8,7 @@ export async function monitorDisputes(logger: typeof Logger, params: MonitoringP
|
||||
await oo.queryFilter(oo.filters.AssertionDisputed(), params.blockRange.start, params.blockRange.end)
|
||||
).map(async (event) => ({
|
||||
tx: event.transactionHash,
|
||||
eventIndex: event.logIndex,
|
||||
assertionId: event.args.assertionId,
|
||||
claim: (await oo.queryFilter(oo.filters.AssertionMade(event.args.assertionId))).map((event) => event.args.claim)[0],
|
||||
assertionData: await oo.getAssertion(event.args.assertionId),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { createEtherscanLinkMarkdown, createFormatFunction } from "@uma/common";
|
||||
import { utils } from "ethers";
|
||||
import { Logger, OptimisticOracleV3Ethers } from "./common";
|
||||
import { generateOOv3UILink, Logger, OptimisticOracleV3Ethers } from "./common";
|
||||
|
||||
import type { MonitoringParams } from "./common";
|
||||
import { getCurrencyDecimals, getCurrencySymbol, tryHexToUtf8String } from "../utils/contracts";
|
||||
@@ -9,6 +9,7 @@ export async function logAssertion(
|
||||
logger: typeof Logger,
|
||||
assertion: {
|
||||
tx: string;
|
||||
eventIndex: number;
|
||||
assertionId: string;
|
||||
claim: string;
|
||||
assertionData: Awaited<ReturnType<typeof OptimisticOracleV3Ethers.prototype.getAssertion>>;
|
||||
@@ -37,7 +38,10 @@ export async function logAssertion(
|
||||
" " +
|
||||
currencySymbol +
|
||||
". The assertion can be disputed till " +
|
||||
new Date(Number(assertion.assertionData.expirationTime) * 1000).toUTCString(),
|
||||
new Date(Number(assertion.assertionData.expirationTime) * 1000).toUTCString() +
|
||||
": " +
|
||||
generateOOv3UILink(assertion.tx, assertion.eventIndex, params.chainId) +
|
||||
".",
|
||||
notificationPath: "optimistic-oracle",
|
||||
discordPaths: ["oo-fact-checking", "oo-events"],
|
||||
});
|
||||
@@ -47,6 +51,7 @@ export async function logDispute(
|
||||
logger: typeof Logger,
|
||||
dispute: {
|
||||
tx: string;
|
||||
eventIndex: number;
|
||||
assertionId: string;
|
||||
claim: string;
|
||||
assertionData: Awaited<ReturnType<typeof OptimisticOracleV3Ethers.prototype.getAssertion>>;
|
||||
@@ -65,7 +70,10 @@ export async function logDispute(
|
||||
". Claim: " +
|
||||
tryHexToUtf8String(dispute.claim) +
|
||||
". Identifier: " +
|
||||
utils.parseBytes32String(dispute.assertionData.identifier),
|
||||
utils.parseBytes32String(dispute.assertionData.identifier) +
|
||||
". " +
|
||||
generateOOv3UILink(dispute.tx, dispute.eventIndex, params.chainId) +
|
||||
".",
|
||||
notificationPath: "optimistic-oracle",
|
||||
discordPaths: ["oo-fact-checking", "oo-events"],
|
||||
});
|
||||
@@ -75,6 +83,7 @@ export async function logSettlement(
|
||||
logger: typeof Logger,
|
||||
settlement: {
|
||||
tx: string;
|
||||
eventIndex: number;
|
||||
assertionId: string;
|
||||
claim: string;
|
||||
assertionData: Awaited<ReturnType<typeof OptimisticOracleV3Ethers.prototype.getAssertion>>;
|
||||
@@ -94,7 +103,10 @@ export async function logSettlement(
|
||||
". Identifier: " +
|
||||
utils.parseBytes32String(settlement.assertionData.identifier) +
|
||||
". Result: assertion was " +
|
||||
(settlement.assertionData.settlementResolution ? "true" : "false"),
|
||||
(settlement.assertionData.settlementResolution ? "true" : "false") +
|
||||
". " +
|
||||
generateOOv3UILink(settlement.tx, settlement.eventIndex, params.chainId) +
|
||||
".",
|
||||
notificationPath: "optimistic-oracle",
|
||||
discordPaths: ["oo-fact-checking", "oo-events"],
|
||||
});
|
||||
|
||||
@@ -8,6 +8,7 @@ export async function monitorSettlements(logger: typeof Logger, params: Monitori
|
||||
await oo.queryFilter(oo.filters.AssertionSettled(), params.blockRange.start, params.blockRange.end)
|
||||
).map(async (event) => ({
|
||||
tx: event.transactionHash,
|
||||
eventIndex: event.logIndex,
|
||||
assertionId: event.args.assertionId,
|
||||
claim: (await oo.queryFilter(oo.filters.AssertionMade(event.args.assertionId))).map((event) => event.args.claim)[0],
|
||||
assertionData: await oo.getAssertion(event.args.assertionId),
|
||||
|
||||
@@ -6,6 +6,7 @@ import type { Provider } from "@ethersproject/abstract-provider";
|
||||
export { OptimisticOracleV3Ethers } from "@uma/contracts-node";
|
||||
export { Logger } from "@uma/financial-templates-lib";
|
||||
export { getContractInstanceWithProvider } from "../utils/contracts";
|
||||
export { generateOOv3UILink } from "../utils/logger";
|
||||
|
||||
export interface BotModes {
|
||||
assertionsEnabled: boolean;
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
const optimisticOracleV2UIBaseUrl = "https://oracle.uma.xyz";
|
||||
const testnetOptimisticOracleV2UIBaseUrl = "https://testnet.oracle.uma.xyz";
|
||||
|
||||
// monitor-v2 package is only using Optimistic Oracle V3, so currently there is no need to generalize this.
|
||||
export const generateOOv3UILink = (transactionHash: string, eventIndex: number, chainId?: number): string => {
|
||||
// Currently testnet UI supports only goerli, so assume any other chain is production.
|
||||
const baseUrl = chainId === 5 ? testnetOptimisticOracleV2UIBaseUrl : optimisticOracleV2UIBaseUrl;
|
||||
return `<${baseUrl}/?transactionHash=${transactionHash}&eventIndex=${eventIndex}|View in UI>`;
|
||||
};
|
||||
Reference in New Issue
Block a user