From 9359855cd2c21d789fd707babe2ba451387604bb Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Thu, 22 Dec 2022 21:28:55 +0530 Subject: [PATCH 1/8] updated fortal alerts as per new job schedules --- agents/bot-operations-agent/README.md | 17 +- agents/bot-operations-agent/package-lock.json | 4 +- agents/bot-operations-agent/package.json | 2 +- agents/bot-operations-agent/src/agent.ts | 173 ++++++++---------- agents/bot-operations-agent/src/constants.ts | 54 ++---- agents/bot-operations-agent/src/utils.ts | 9 +- agents/suspicious-amount-agent/README.md | 7 + .../suspicious-amount-agent/package-lock.json | 4 +- agents/suspicious-amount-agent/package.json | 2 +- agents/suspicious-amount-agent/src/agent.ts | 2 + .../suspicious-amount-agent/src/constants.ts | 2 + .../src/suspicious-rewards.ts | 51 ++---- 12 files changed, 140 insertions(+), 187 deletions(-) diff --git a/agents/bot-operations-agent/README.md b/agents/bot-operations-agent/README.md index 3387cea..e17f07b 100644 --- a/agents/bot-operations-agent/README.md +++ b/agents/bot-operations-agent/README.md @@ -6,13 +6,6 @@ ## Alerts -- BNBx-REWARD-CHANGE - - - Fired when Reward changes by more than 0.5 % - - Severity is set to "Medium" - - Type is set to "Info" - - metadata: lastRewardAmount, curentRewardAmount - - BNBx-DAILY-REWARDS - Fired when Daily Rewards is not executed @@ -22,35 +15,35 @@ - BNBx-START-DELEGATION - - Fired when StartDelegation is not executed for 36 hours + - Fired when StartDelegation is not executed for 48 hours - Severity is set to "Critical" - Type is set to "Info" - metadata: lastStartDelegationTime - BNBx-COMPLETE-DELEGATION - - Fired when CompleteDelegation is not executed for 12 hours past StartDelegation + - Fired when CompleteDelegation is not executed for 1 hour past StartDelegation - Severity is set to "Critical" - Type is set to "Info" - metadata: lastStartDelegationTime, lastCompleteDelegationTime - BNBx-START-UNDELEGATION - - Fired when StartUndelegation is not executed for 7 days and 1 hours + - Fired when StartUndelegation is not executed for 10 mins past its schedule time - Severity is set to "Critical" - Type is set to "Info" - metadata: lastStartUndelegationTime - BNBx-UNDELEGATION-UPDATE - - Fired when undelegationStarted is not executed for 12 hours past StartUndelegation + - Fired when undelegationStarted is not executed for 30 Mins past StartUndelegation - Severity is set to "Critical" - Type is set to "Info" - metadata: lastStartDelegationTime, lastUndelegationUpdateTime - BNBx-COMPLETE-UNDELEGATION - - Fired when CompleteUndelegation is not executed for 8 days and 12 hours past StartUndelegation + - Fired when CompleteUndelegation is not executed for 7 days and 3 hours past StartUndelegation - Severity is set to "Critical" - Type is set to "Info" - metadata: lastStartUndelegationTime, lastCompleteUndelegationTime diff --git a/agents/bot-operations-agent/package-lock.json b/agents/bot-operations-agent/package-lock.json index 29a5914..b8a4d25 100644 --- a/agents/bot-operations-agent/package-lock.json +++ b/agents/bot-operations-agent/package-lock.json @@ -1,11 +1,11 @@ { - "name": "forta-agent-starter", + "name": "bnbx-bot-operations-agent", "version": "0.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "forta-agent-starter", + "name": "bnbx-bot-operations-agent", "version": "0.0.1", "dependencies": { "forta-agent": "^0.1.9" diff --git a/agents/bot-operations-agent/package.json b/agents/bot-operations-agent/package.json index a042485..e0dcb5c 100644 --- a/agents/bot-operations-agent/package.json +++ b/agents/bot-operations-agent/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "description": "Alerts on Off Chain Bot Delays and Failures", "chainIds": [ - 1 + 56 ], "scripts": { "build": "tsc", diff --git a/agents/bot-operations-agent/src/agent.ts b/agents/bot-operations-agent/src/agent.ts index 1b84c4e..42dc214 100644 --- a/agents/bot-operations-agent/src/agent.ts +++ b/agents/bot-operations-agent/src/agent.ts @@ -1,4 +1,3 @@ -import { BigNumber } from "ethers"; import { Finding, FindingSeverity, @@ -12,24 +11,21 @@ import { COMPLETE_UNDELEGATION_DELAY, COMPLETE_UNDELEGATION_FN, protocol, - REWARD_CHANGE_BPS, REWARD_DELAY_HOURS, REWARD_EVENT, STAKE_MANAGER, START_DELEGATION_DELAY, START_DELEGATION_FN, START_UNDELEGATION_DELAY, + START_UNDELEGATION_DELAY_MINS, START_UNDELEGATION_FN, - TOTAL_BPS, - UNDELEGATION_UPDATE_DELAY, + UNDELEGATION_UPDATE_DELAY_MINS, UNDELEGATION_UPDATE_FN, } from "./constants"; -import { getHours } from "./utils"; +import { getHours, getMins } from "./utils"; -let dailyRewardsFailed: boolean, - lastRewardsTime: Date, - lastRewardAmount: BigNumber; +let dailyRewardsFailed: boolean, lastRewardsTime: Date; let lastStartDelegationTime: Date, startDelegationFailed: boolean; let lastCompleteDelegationTime: Date, completeDelegationFailed: boolean; @@ -43,7 +39,7 @@ const handleTransaction: HandleTransaction = async ( ) => { const findings: Finding[] = ( await Promise.all([ - // handleRewardTransaction(txEvent), + handleRewardTransaction(txEvent), handleStartDelegationTransaction(txEvent), handleCompleteDelegationTransaction(txEvent), handleStartUndelegationTransaction(txEvent), @@ -55,73 +51,44 @@ const handleTransaction: HandleTransaction = async ( return findings; }; -// const handleRewardTransaction: HandleTransaction = async ( -// txEvent: TransactionEvent -// ) => { -// const findings: Finding[] = []; -// const bnbxRewardEvents = txEvent.filterLog(REWARD_EVENT, STAKE_MANAGER); - -// if (bnbxRewardEvents.length) { -// const { _amount } = bnbxRewardEvents[0].args; -// if (lastRewardsTime) { -// if ( -// lastRewardAmount -// .sub(_amount) -// .abs() -// .gt(lastRewardAmount.mul(REWARD_CHANGE_BPS).div(TOTAL_BPS)) -// ) { -// findings.push( -// Finding.fromObject({ -// name: "Significant Reward Change", -// description: `Reward changed more than ${ -// (REWARD_CHANGE_BPS * 100) / TOTAL_BPS -// } %`, -// alertId: "BNBx-REWARD-CHANGE", -// protocol: protocol, -// severity: FindingSeverity.Medium, -// type: FindingType.Info, -// metadata: { -// lastRewardAmount: lastRewardAmount.toString(), -// cuurentRewardAmount: _amount.toString(), -// }, -// }) -// ); -// } -// } - -// lastRewardsTime = new Date(); -// dailyRewardsFailed = false; -// lastRewardAmount = _amount; - -// return findings; -// } - -// if (!lastRewardsTime) return findings; - -// if (dailyRewardsFailed) return findings; - -// const currentTime = new Date(); -// const diff = currentTime.getTime() - lastRewardsTime.getTime(); -// const diffHours = getHours(diff); -// if (diffHours > REWARD_DELAY_HOURS) { -// findings.push( -// Finding.fromObject({ -// name: "Daily Rewards Failed", -// description: `Daily Rewards Autocompund not invoked since ${REWARD_DELAY_HOURS} Hours`, -// alertId: "BNBx-DAILY-REWARDS", -// protocol: protocol, -// severity: FindingSeverity.Critical, -// type: FindingType.Info, -// metadata: { -// lastRewardsTime: lastRewardsTime.toUTCString(), -// }, -// }) -// ); -// dailyRewardsFailed = true; -// } - -// return findings; -// }; +const handleRewardTransaction: HandleTransaction = async ( + txEvent: TransactionEvent +) => { + const findings: Finding[] = []; + const bnbxRewardEvents = txEvent.filterLog(REWARD_EVENT, STAKE_MANAGER); + + if (bnbxRewardEvents.length) { + lastRewardsTime = new Date(); + dailyRewardsFailed = false; + return []; + } + + if (!lastRewardsTime) return []; + + if (dailyRewardsFailed) return []; + + const currentTime = new Date(); + const diff = currentTime.getTime() - lastRewardsTime.getTime(); + const diffHours = getHours(diff); + if (diffHours > REWARD_DELAY_HOURS) { + findings.push( + Finding.fromObject({ + name: "Daily Rewards Failed", + description: `Rewards Autocompound not invoked since ${REWARD_DELAY_HOURS} Hours`, + alertId: "BNBx-DAILY-REWARDS", + protocol: protocol, + severity: FindingSeverity.Critical, + type: FindingType.Info, + metadata: { + lastRewardsTime: lastRewardsTime.toUTCString(), + }, + }) + ); + dailyRewardsFailed = true; + } + + return findings; +}; const handleStartDelegationTransaction: HandleTransaction = async ( txEvent: TransactionEvent @@ -132,15 +99,18 @@ const handleStartDelegationTransaction: HandleTransaction = async ( STAKE_MANAGER ); + // found startDelegation -> no alert if (startDelegationInvocations.length) { lastStartDelegationTime = new Date(); startDelegationFailed = false; - return findings; + return []; } - if (!lastStartDelegationTime) return findings; + // startDelegation not invoked since forta bot deployment -> no alert + if (!lastStartDelegationTime) return []; - if (startDelegationFailed) return findings; + // already alerted earlier -> repeated alert will make channel noisy + if (startDelegationFailed) return []; const currentTime = new Date(); const diff = currentTime.getTime() - lastStartDelegationTime.getTime(); @@ -177,27 +147,27 @@ const handleCompleteDelegationTransaction: HandleTransaction = async ( if (completeDelegationInvocations.length) { lastCompleteDelegationTime = new Date(); completeDelegationFailed = false; - return findings; + return []; } if (!lastStartDelegationTime || !lastCompleteDelegationTime) { - return findings; + return []; } - if (startDelegationFailed || completeDelegationFailed) return findings; + if (startDelegationFailed || completeDelegationFailed) return []; const currentTime = new Date(); const diff = currentTime.getTime() - lastStartDelegationTime.getTime(); const diffHours = getHours(diff); if ( - diffHours > COMPLETE_DELEGATION_DELAY && + diffHours >= COMPLETE_DELEGATION_DELAY && lastStartDelegationTime.getTime() > lastCompleteDelegationTime.getTime() ) { findings.push( Finding.fromObject({ name: "Complete Delegation Failed", - description: `Complete Delegation not invoked since ${COMPLETE_DELEGATION_DELAY} Hours past last Start Delegation`, + description: `Complete Delegation not invoked since ${COMPLETE_DELEGATION_DELAY} Hour past last Start Delegation`, alertId: "BNBx-COMPLETE-DELEGATION", protocol: protocol, severity: FindingSeverity.Critical, @@ -226,21 +196,26 @@ const handleStartUndelegationTransaction: HandleTransaction = async ( if (startUndelegationInvocations.length) { lastStartUndelegationTime = new Date(); startUndelegationFailed = false; - return findings; + return []; } - if (!lastStartUndelegationTime) return findings; + if (!lastStartUndelegationTime) return []; - if (startUndelegationFailed) return findings; + if (startUndelegationFailed) return []; const currentTime = new Date(); const diff = currentTime.getTime() - lastStartUndelegationTime.getTime(); const diffHours = getHours(diff); - if (diffHours > START_UNDELEGATION_DELAY) { + const diffMins = getMins(diff); + + if ( + diffHours >= START_UNDELEGATION_DELAY && + diffMins >= START_UNDELEGATION_DELAY_MINS + ) { findings.push( Finding.fromObject({ name: "Start Undelegation Failed", - description: `Start Undelegation not invoked since ${START_UNDELEGATION_DELAY} Hours`, + description: `Start Undelegation not invoked ${START_UNDELEGATION_DELAY_MINS} Mins since its schedule time`, alertId: "BNBx-START-UNDELEGATION", protocol: protocol, severity: FindingSeverity.Critical, @@ -268,27 +243,27 @@ const handleUndelegationUpdateTransaction: HandleTransaction = async ( if (UndelegationUpdateInvocations.length) { lastUndelegationUpdateTime = new Date(); undelegationUpdateFailed = false; - return findings; + return []; } if (!lastStartUndelegationTime || !lastUndelegationUpdateTime) { - return findings; + return []; } - if (startUndelegationFailed || undelegationUpdateFailed) return findings; + if (startUndelegationFailed || undelegationUpdateFailed) return []; const currentTime = new Date(); const diff = currentTime.getTime() - lastStartUndelegationTime.getTime(); - const diffHours = getHours(diff); + const diffMins = getMins(diff); if ( - diffHours > UNDELEGATION_UPDATE_DELAY && + diffMins >= UNDELEGATION_UPDATE_DELAY_MINS && lastStartUndelegationTime.getTime() > lastUndelegationUpdateTime.getTime() ) { findings.push( Finding.fromObject({ name: "Undelegation Update Failed", - description: `Undelegation not invoked at Beacon Chain since ${UNDELEGATION_UPDATE_DELAY} Hours past last Start UnDelegation`, + description: `Undelegation not invoked at Beacon Chain since ${UNDELEGATION_UPDATE_DELAY_MINS} Mins past last Start UnDelegation`, alertId: "BNBx-UNDELEGATION-UPDATE", protocol: protocol, severity: FindingSeverity.Critical, @@ -317,21 +292,21 @@ const handleCompleteUndelegationTransaction: HandleTransaction = async ( if (completeUndelegationInvocations.length) { lastCompleteUndelegationTime = new Date(); completeUndelegationFailed = false; - return findings; + return []; } if (!lastStartUndelegationTime || !lastCompleteUndelegationTime) { - return findings; + return []; } - if (startUndelegationFailed || completeUndelegationFailed) return findings; + if (startUndelegationFailed || completeUndelegationFailed) return []; const currentTime = new Date(); const diff = currentTime.getTime() - lastStartUndelegationTime.getTime(); const diffHours = getHours(diff); if ( - diffHours > COMPLETE_UNDELEGATION_DELAY && + diffHours >= COMPLETE_UNDELEGATION_DELAY && lastStartUndelegationTime.getTime() > lastCompleteUndelegationTime.getTime() ) { findings.push( diff --git a/agents/bot-operations-agent/src/constants.ts b/agents/bot-operations-agent/src/constants.ts index 6ff968f..2d64082 100644 --- a/agents/bot-operations-agent/src/constants.ts +++ b/agents/bot-operations-agent/src/constants.ts @@ -1,40 +1,24 @@ -const protocol = "BNBx Stader"; -const STAKE_MANAGER = "0x7276241a669489E4BBB76f63d2A43Bfe63080F2F"; -const REWARD_EVENT = "event Redelegate(uint256 _rewardsId, uint256 _amount)"; -const REWARD_DELAY_HOURS = 24; -const REWARD_CHANGE_BPS = 50; // 0 - 10_000 -const TOTAL_BPS = 10000; +export const protocol = "BNBx Stader"; +export const STAKE_MANAGER = "0x7276241a669489E4BBB76f63d2A43Bfe63080F2F"; +export const REWARD_EVENT = + "event Redelegate(uint256 _rewardsId, uint256 _amount)"; +export const REWARD_DELAY_HOURS = 24; -const START_DELEGATION_FN = "function startDelegation()"; -const START_DELEGATION_DELAY = 36; +export const START_DELEGATION_FN = "function startDelegation()"; +export const START_DELEGATION_DELAY = 48; -const COMPLETE_DELEGATION_FN = "function completeDelegation(uint256 _uuid)"; -const COMPLETE_DELEGATION_DELAY = 12; +export const COMPLETE_DELEGATION_FN = + "function completeDelegation(uint256 _uuid)"; +export const COMPLETE_DELEGATION_DELAY = 1; -const START_UNDELEGATION_FN = "function startUndelegation()"; -const START_UNDELEGATION_DELAY = 169; +export const START_UNDELEGATION_FN = "function startUndelegation()"; +export const START_UNDELEGATION_DELAY = 168; +export const START_UNDELEGATION_DELAY_MINS = 10; -const UNDELEGATION_UPDATE_FN = "function undelegationStarted(uint256 _uuid)"; -const UNDELEGATION_UPDATE_DELAY = 12; +export const UNDELEGATION_UPDATE_FN = + "function undelegationStarted(uint256 _uuid)"; +export const UNDELEGATION_UPDATE_DELAY_MINS = 30; -const COMPLETE_UNDELEGATION_FN = "function completeUndelegation(uint256 _uuid)"; -const COMPLETE_UNDELEGATION_DELAY = 193; - -export { - protocol, - REWARD_EVENT, - REWARD_DELAY_HOURS, - STAKE_MANAGER, - REWARD_CHANGE_BPS, - TOTAL_BPS, - START_DELEGATION_FN, - START_DELEGATION_DELAY, - COMPLETE_DELEGATION_FN, - COMPLETE_DELEGATION_DELAY, - START_UNDELEGATION_FN, - START_UNDELEGATION_DELAY, - UNDELEGATION_UPDATE_FN, - UNDELEGATION_UPDATE_DELAY, - COMPLETE_UNDELEGATION_FN, - COMPLETE_UNDELEGATION_DELAY, -}; +export const COMPLETE_UNDELEGATION_FN = + "function completeUndelegation(uint256 _uuid)"; +export const COMPLETE_UNDELEGATION_DELAY = 171; diff --git a/agents/bot-operations-agent/src/utils.ts b/agents/bot-operations-agent/src/utils.ts index 3f37348..b341242 100644 --- a/agents/bot-operations-agent/src/utils.ts +++ b/agents/bot-operations-agent/src/utils.ts @@ -1,5 +1,8 @@ -const getHours = (miliSecs: number) => { - return miliSecs / (1000 * 60 * 60); +export const getHours = (miliSecs: number) => { + return Math.trunc(miliSecs / (1000 * 60 * 60)); }; -export { getHours }; +export const getMins = (miliSecs: number) => { + const mins = Math.trunc(miliSecs / (1000 * 60)); + return mins % 60; +}; diff --git a/agents/suspicious-amount-agent/README.md b/agents/suspicious-amount-agent/README.md index 9838325..0b55723 100644 --- a/agents/suspicious-amount-agent/README.md +++ b/agents/suspicious-amount-agent/README.md @@ -6,6 +6,13 @@ ## Alerts +- BNBx-REWARD-CHANGE + + - Fired when Reward changes by more than 5 % + - Severity is set to "Medium" + - Type is set to "Info" + - metadata: lastRewardAmount, curentRewardAmount + - BNBx-LARGE-MINT - Fired when BNBx is minted in large amount (500 BNBx) diff --git a/agents/suspicious-amount-agent/package-lock.json b/agents/suspicious-amount-agent/package-lock.json index 76acc3b..3f7b19e 100644 --- a/agents/suspicious-amount-agent/package-lock.json +++ b/agents/suspicious-amount-agent/package-lock.json @@ -1,11 +1,11 @@ { - "name": "bnbx-concerning-amount-bot", + "name": "bnbx-suspicious-amount-agent", "version": "0.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "bnbx-concerning-amount-bot", + "name": "bnbx-suspicious-amount-agent", "version": "0.0.1", "dependencies": { "forta-agent": "^0.1.9" diff --git a/agents/suspicious-amount-agent/package.json b/agents/suspicious-amount-agent/package.json index 008cb6d..ff05058 100644 --- a/agents/suspicious-amount-agent/package.json +++ b/agents/suspicious-amount-agent/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "description": "Alerts on suspicious amount of BNBx minted, unstaked, Rewards", "chainIds": [ - 1 + 56 ], "scripts": { "build": "tsc", diff --git a/agents/suspicious-amount-agent/src/agent.ts b/agents/suspicious-amount-agent/src/agent.ts index 73b5387..df1e6eb 100644 --- a/agents/suspicious-amount-agent/src/agent.ts +++ b/agents/suspicious-amount-agent/src/agent.ts @@ -10,6 +10,7 @@ import * as suspiciousMint from "./suspicious-mint"; import * as suspiciousWithdraw from "./suspicious-withdraw"; import * as erDrop from "./er-drop"; import * as supplyChange from "./bnbx-supply"; +import * as rewardChange from "./suspicious-rewards"; const handleTransaction: HandleTransaction = async ( txEvent: TransactionEvent @@ -18,6 +19,7 @@ const handleTransaction: HandleTransaction = async ( await Promise.all([ suspiciousMint.handleTransaction(txEvent), suspiciousWithdraw.handleTransaction(txEvent), + rewardChange.handleTransaction(txEvent), ]) ).flat(); diff --git a/agents/suspicious-amount-agent/src/constants.ts b/agents/suspicious-amount-agent/src/constants.ts index d5dfba5..8a3b755 100644 --- a/agents/suspicious-amount-agent/src/constants.ts +++ b/agents/suspicious-amount-agent/src/constants.ts @@ -7,6 +7,7 @@ const BEP20_TRANSFER_EVENT = const REQUEST_WITHDRAW_EVENT = "event RequestWithdraw(address indexed _account, uint256 _amountInBnbX)"; const REWARD_EVENT = "event Redelegate(uint256 _rewardsId, uint256 _amount)"; +const REWARD_CHANGE_PCT = 5; // 0 - 100 const BNBX_MINT_THRESHOLD = "500"; const BNBX_UNSTAKE_THRESHOLD = "500"; @@ -23,6 +24,7 @@ export { BEP20_TRANSFER_EVENT, REQUEST_WITHDRAW_EVENT, REWARD_EVENT, + REWARD_CHANGE_PCT, BNBX_MINT_THRESHOLD, BNBX_UNSTAKE_THRESHOLD, MIN_REWARD_THRESHOLD, diff --git a/agents/suspicious-amount-agent/src/suspicious-rewards.ts b/agents/suspicious-amount-agent/src/suspicious-rewards.ts index 334aca9..2756085 100644 --- a/agents/suspicious-amount-agent/src/suspicious-rewards.ts +++ b/agents/suspicious-amount-agent/src/suspicious-rewards.ts @@ -1,5 +1,5 @@ +import { BigNumber } from "ethers"; import { - ethers, Finding, FindingSeverity, FindingType, @@ -7,13 +7,14 @@ import { TransactionEvent, } from "forta-agent"; import { - MAX_REWARD_THRESHOLD, - MIN_REWARD_THRESHOLD, protocol, + REWARD_CHANGE_PCT, REWARD_EVENT, STAKE_MANAGER, } from "./constants"; +let lastRewardAmount: BigNumber; + const handleTransaction: HandleTransaction = async ( txEvent: TransactionEvent ) => { @@ -22,45 +23,31 @@ const handleTransaction: HandleTransaction = async ( const bnbxRewardEvents = txEvent.filterLog(REWARD_EVENT, STAKE_MANAGER); bnbxRewardEvents.forEach((rewardEvents) => { - const { _rewardsId, _amount } = rewardEvents.args; - - const normalizedValue = ethers.utils.formatEther(_amount); - const minThreshold = ethers.utils.parseEther(MIN_REWARD_THRESHOLD); - const maxThreshold = ethers.utils.parseEther(MAX_REWARD_THRESHOLD); - - if (_amount.lt(minThreshold)) { + const { _amount } = rewardEvents.args; + if ( + lastRewardAmount && + lastRewardAmount + .sub(_amount) + .abs() + .gt(lastRewardAmount.mul(REWARD_CHANGE_PCT).div(100)) + ) { findings.push( Finding.fromObject({ - name: "Low BNBx Reward", - description: `Low amount of BNBx Reward Received: ${normalizedValue}`, - alertId: "BNBx-3", + name: "Significant Reward Change", + description: `Reward changed more than ${REWARD_CHANGE_PCT} %`, + alertId: "BNBx-REWARD-CHANGE", protocol: protocol, - severity: FindingSeverity.High, + severity: FindingSeverity.Medium, type: FindingType.Info, metadata: { - rewardsId: _rewardsId.toString(), - amount: _amount.toString(), + lastRewardAmount: lastRewardAmount.toString(), + cuurentRewardAmount: _amount.toString(), }, }) ); } - if (_amount.gt(maxThreshold)) { - findings.push( - Finding.fromObject({ - name: "High BNBx Reward", - description: `High amount of BNBx Reward Received: ${normalizedValue}`, - alertId: "BNBx-4", - protocol: "BNBx Stader", - severity: FindingSeverity.High, - type: FindingType.Info, - metadata: { - _rewardsId, - _amount, - }, - }) - ); - } + lastRewardAmount = _amount; }); return findings; From d2bc60f4500fa875a3879216cd9d9b5aa622f662 Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Thu, 22 Dec 2022 22:01:16 +0530 Subject: [PATCH 2/8] updated logs --- agents/bot-operations-agent/publish.log | 1 + agents/suspicious-amount-agent/publish.log | 1 + 2 files changed, 2 insertions(+) diff --git a/agents/bot-operations-agent/publish.log b/agents/bot-operations-agent/publish.log index b111a4d..a78eba9 100644 --- a/agents/bot-operations-agent/publish.log +++ b/agents/bot-operations-agent/publish.log @@ -2,3 +2,4 @@ Tue, 30 Aug 2022 19:58:56 GMT: successfully added agent id 0xb62f2ab23098094bf40 Wed, 31 Aug 2022 20:59:13 GMT: successfully updated agent id 0xb62f2ab23098094bf40db49a7379222d44f94bc656cd67906cf173b2eadb2e9c with manifest QmVKTNiRU9k4naWSwVNK54GovBfVzd7xTin77hFp31g7yK Mon, 05 Sep 2022 18:28:37 GMT: successfully updated agent id 0xb62f2ab23098094bf40db49a7379222d44f94bc656cd67906cf173b2eadb2e9c with manifest QmYKn7Ytmdi6BWCS1McXiYME3VoSwNaejHqicjnWX4axEs Wed, 07 Sep 2022 19:30:06 GMT: successfully updated agent id 0xb62f2ab23098094bf40db49a7379222d44f94bc656cd67906cf173b2eadb2e9c with manifest QmWDUsnKTu2FTq9UXpSeJcEu9FiFjBiyoqnoqWnsPc5gzq +Thu, 22 Dec 2022 16:28:37 GMT: successfully updated agent id 0xb62f2ab23098094bf40db49a7379222d44f94bc656cd67906cf173b2eadb2e9c with manifest QmRjvzT164q3cEpYqCD6HJ4KK13sLWtRM8J17SCP9JR1cY diff --git a/agents/suspicious-amount-agent/publish.log b/agents/suspicious-amount-agent/publish.log index dbe22ef..8f1c6c0 100644 --- a/agents/suspicious-amount-agent/publish.log +++ b/agents/suspicious-amount-agent/publish.log @@ -6,3 +6,4 @@ Mon, 05 Sep 2022 18:21:48 GMT: successfully updated agent id 0x1b10e9f5cd672d1b7 Tue, 06 Sep 2022 10:56:42 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmZ46oxayDxyC5khFQ9M2Xv7C5Rsid4wcgSSYHk74Z3PD9 Wed, 07 Sep 2022 06:05:40 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmP6WuQbcAWfxMN3nS9jd8c19biy3iE5idd8n9kSgt2Kec Mon, 03 Oct 2022 19:15:16 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmQ1JbT3SiDyi7g2u5xhnWDwJvU7coMXnwDoaoWNrSGBQN +Thu, 22 Dec 2022 16:25:27 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmYD7ckPMPMJDUFB5WPsvTE9awyUKx4wNymsXVdQg8GUMc From bcf31eb846215ecf0e0c6eafcd97f2bf9e55bc2f Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Mon, 27 Feb 2023 01:06:54 +0530 Subject: [PATCH 3/8] contract upgrade timelock alert --- agents/suspicious-amount-agent/README.md | 8 ++++ agents/suspicious-amount-agent/src/agent.ts | 2 + .../suspicious-amount-agent/src/constants.ts | 5 ++ .../src/upgrade-proposal.ts | 47 +++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 agents/suspicious-amount-agent/src/upgrade-proposal.ts diff --git a/agents/suspicious-amount-agent/README.md b/agents/suspicious-amount-agent/README.md index 0b55723..dba17ba 100644 --- a/agents/suspicious-amount-agent/README.md +++ b/agents/suspicious-amount-agent/README.md @@ -47,3 +47,11 @@ - Severity is set to "High" - Type is set to "Suspicious" - metadata: lastSupply, currentSupply + +- BNBX-TIMELOCK + + - Fired when contract upgrade proposal is scheduled + - Severity is set to "Info" + - Type is set to "Info" + - metadata: delay + - addresses: [timelock, proxy_admin] diff --git a/agents/suspicious-amount-agent/src/agent.ts b/agents/suspicious-amount-agent/src/agent.ts index df1e6eb..c56a510 100644 --- a/agents/suspicious-amount-agent/src/agent.ts +++ b/agents/suspicious-amount-agent/src/agent.ts @@ -11,6 +11,7 @@ import * as suspiciousWithdraw from "./suspicious-withdraw"; import * as erDrop from "./er-drop"; import * as supplyChange from "./bnbx-supply"; import * as rewardChange from "./suspicious-rewards"; +import * as upgradeProposal from "./upgrade-proposal"; const handleTransaction: HandleTransaction = async ( txEvent: TransactionEvent @@ -20,6 +21,7 @@ const handleTransaction: HandleTransaction = async ( suspiciousMint.handleTransaction(txEvent), suspiciousWithdraw.handleTransaction(txEvent), rewardChange.handleTransaction(txEvent), + upgradeProposal.handleTransaction(txEvent), ]) ).flat(); diff --git a/agents/suspicious-amount-agent/src/constants.ts b/agents/suspicious-amount-agent/src/constants.ts index 8a3b755..842172f 100644 --- a/agents/suspicious-amount-agent/src/constants.ts +++ b/agents/suspicious-amount-agent/src/constants.ts @@ -1,6 +1,8 @@ const protocol = "BNBx Stader"; const BNBx = "0x1bdd3Cf7F79cfB8EdbB955f20ad99211551BA275"; const STAKE_MANAGER = "0x7276241a669489E4BBB76f63d2A43Bfe63080F2F"; +export const TIMELOCK_CONTRACT = "0x224F1C0DbC716e984e56E8F672C7733631aE41c1"; // TODO: replace with bsc mainnet addr +export const PROXY_ADMIN = "0x1CC9855DDB4dB4AC7160C5f1EF9529D884d008Fe"; // TODO: replace with bsc mainnet addr const BEP20_TRANSFER_EVENT = "event Transfer(address indexed from, address indexed to, uint256 value)"; @@ -9,6 +11,9 @@ const REQUEST_WITHDRAW_EVENT = const REWARD_EVENT = "event Redelegate(uint256 _rewardsId, uint256 _amount)"; const REWARD_CHANGE_PCT = 5; // 0 - 100 +export const TIMELOCK_SCHEDULE_EVENT = + "event CallScheduled(bytes32 indexed id, uint256 indexed index, address target,uint256 value,bytes data,bytes32 predecessor, uint256 delay)"; + const BNBX_MINT_THRESHOLD = "500"; const BNBX_UNSTAKE_THRESHOLD = "500"; const MIN_REWARD_THRESHOLD = "1"; diff --git a/agents/suspicious-amount-agent/src/upgrade-proposal.ts b/agents/suspicious-amount-agent/src/upgrade-proposal.ts new file mode 100644 index 0000000..384a236 --- /dev/null +++ b/agents/suspicious-amount-agent/src/upgrade-proposal.ts @@ -0,0 +1,47 @@ +import { + Finding, + FindingSeverity, + FindingType, + HandleTransaction, + TransactionEvent, +} from "forta-agent"; +import { + protocol, + PROXY_ADMIN, + TIMELOCK_CONTRACT, + TIMELOCK_SCHEDULE_EVENT, +} from "./constants"; + +const handleTransaction: HandleTransaction = async ( + txEvent: TransactionEvent +) => { + const findings: Finding[] = []; + + const upgradeEvents = txEvent + .filterLog(TIMELOCK_SCHEDULE_EVENT, TIMELOCK_CONTRACT) + .filter((transferEvent) => { + const { target } = transferEvent.args; + return target === PROXY_ADMIN; + }); + + if (upgradeEvents.length) { + findings.push( + Finding.fromObject({ + name: "Proposal Scheduled", + description: `Upgrade Proposal Scheduled. Timelock expires in ${upgradeEvents[0].args.delay.toString()} seconds`, + alertId: "BNBX-TIMELOCK", + protocol: protocol, + severity: FindingSeverity.Info, + type: FindingType.Info, + metadata: { + delay: upgradeEvents[0].args.delay.toString(), + }, + addresses: [TIMELOCK_CONTRACT, PROXY_ADMIN], + }) + ); + } + + return findings; +}; + +export { handleTransaction }; From 0fa9890dc9e0d70729639a7e627e6108fe94bf7e Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Mon, 27 Feb 2023 02:11:37 +0530 Subject: [PATCH 4/8] changed to bsc mainnet address --- agents/suspicious-amount-agent/README.md | 6 +++--- agents/suspicious-amount-agent/src/constants.ts | 14 +++++--------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/agents/suspicious-amount-agent/README.md b/agents/suspicious-amount-agent/README.md index dba17ba..cbca6d2 100644 --- a/agents/suspicious-amount-agent/README.md +++ b/agents/suspicious-amount-agent/README.md @@ -8,21 +8,21 @@ - BNBx-REWARD-CHANGE - - Fired when Reward changes by more than 5 % + - Fired when Reward changes by more than 20 % - Severity is set to "Medium" - Type is set to "Info" - metadata: lastRewardAmount, curentRewardAmount - BNBx-LARGE-MINT - - Fired when BNBx is minted in large amount (500 BNBx) + - Fired when BNBx is minted in large amount (250 BNBx) - Severity is set to "High" - Type is set to "Info" - metadata: to, value - BNBx-LARGE-UNSTAKE - - Fired when User unstakes large amount of BNBx (500 BNBx) + - Fired when User unstakes large amount of BNBx (250 BNBx) - Severity is set to "High" - Type is set to "Info" - metadata: account, amountInBnbX, diff --git a/agents/suspicious-amount-agent/src/constants.ts b/agents/suspicious-amount-agent/src/constants.ts index 842172f..52324f0 100644 --- a/agents/suspicious-amount-agent/src/constants.ts +++ b/agents/suspicious-amount-agent/src/constants.ts @@ -1,23 +1,21 @@ const protocol = "BNBx Stader"; const BNBx = "0x1bdd3Cf7F79cfB8EdbB955f20ad99211551BA275"; const STAKE_MANAGER = "0x7276241a669489E4BBB76f63d2A43Bfe63080F2F"; -export const TIMELOCK_CONTRACT = "0x224F1C0DbC716e984e56E8F672C7733631aE41c1"; // TODO: replace with bsc mainnet addr -export const PROXY_ADMIN = "0x1CC9855DDB4dB4AC7160C5f1EF9529D884d008Fe"; // TODO: replace with bsc mainnet addr +export const TIMELOCK_CONTRACT = "0xd990a252e7e36700d47520e46cd2b3e446836488"; +export const PROXY_ADMIN = "0xF90e293D34a42CB592Be6BE6CA19A9963655673C"; const BEP20_TRANSFER_EVENT = "event Transfer(address indexed from, address indexed to, uint256 value)"; const REQUEST_WITHDRAW_EVENT = "event RequestWithdraw(address indexed _account, uint256 _amountInBnbX)"; const REWARD_EVENT = "event Redelegate(uint256 _rewardsId, uint256 _amount)"; -const REWARD_CHANGE_PCT = 5; // 0 - 100 +const REWARD_CHANGE_PCT = 20; // 0 - 100 export const TIMELOCK_SCHEDULE_EVENT = "event CallScheduled(bytes32 indexed id, uint256 indexed index, address target,uint256 value,bytes data,bytes32 predecessor, uint256 delay)"; -const BNBX_MINT_THRESHOLD = "500"; -const BNBX_UNSTAKE_THRESHOLD = "500"; -const MIN_REWARD_THRESHOLD = "1"; -const MAX_REWARD_THRESHOLD = "20"; +const BNBX_MINT_THRESHOLD = "250"; +const BNBX_UNSTAKE_THRESHOLD = "250"; const BNBX_SUPPLY_CHANGE_PCT = 10; const BNBX_SUPPLY_CHANGE_HOURS = 1; @@ -32,8 +30,6 @@ export { REWARD_CHANGE_PCT, BNBX_MINT_THRESHOLD, BNBX_UNSTAKE_THRESHOLD, - MIN_REWARD_THRESHOLD, - MAX_REWARD_THRESHOLD, BNBX_SUPPLY_CHANGE_PCT, BNBX_SUPPLY_CHANGE_HOURS, }; From a90491b6a6cc3295b56c4f9843daeb19cf913a58 Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Mon, 27 Feb 2023 03:08:12 +0530 Subject: [PATCH 5/8] logs added --- agents/suspicious-amount-agent/publish.log | 1 + 1 file changed, 1 insertion(+) diff --git a/agents/suspicious-amount-agent/publish.log b/agents/suspicious-amount-agent/publish.log index 8f1c6c0..da4f85a 100644 --- a/agents/suspicious-amount-agent/publish.log +++ b/agents/suspicious-amount-agent/publish.log @@ -7,3 +7,4 @@ Tue, 06 Sep 2022 10:56:42 GMT: successfully updated agent id 0x1b10e9f5cd672d1b7 Wed, 07 Sep 2022 06:05:40 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmP6WuQbcAWfxMN3nS9jd8c19biy3iE5idd8n9kSgt2Kec Mon, 03 Oct 2022 19:15:16 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmQ1JbT3SiDyi7g2u5xhnWDwJvU7coMXnwDoaoWNrSGBQN Thu, 22 Dec 2022 16:25:27 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmYD7ckPMPMJDUFB5WPsvTE9awyUKx4wNymsXVdQg8GUMc +Sun, 26 Feb 2023 20:48:45 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmT4qsndMNfrFQkSa2NntpH622XoSXov98C6NNh7vNim2b From 5c41d292180dfa90b6afb9afb91bd00ce2d58cd6 Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Mon, 27 Feb 2023 17:24:51 +0530 Subject: [PATCH 6/8] reward threshold at 10% --- agents/suspicious-amount-agent/publish.log | 1 + agents/suspicious-amount-agent/src/constants.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/agents/suspicious-amount-agent/publish.log b/agents/suspicious-amount-agent/publish.log index da4f85a..0b18a37 100644 --- a/agents/suspicious-amount-agent/publish.log +++ b/agents/suspicious-amount-agent/publish.log @@ -8,3 +8,4 @@ Wed, 07 Sep 2022 06:05:40 GMT: successfully updated agent id 0x1b10e9f5cd672d1b7 Mon, 03 Oct 2022 19:15:16 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmQ1JbT3SiDyi7g2u5xhnWDwJvU7coMXnwDoaoWNrSGBQN Thu, 22 Dec 2022 16:25:27 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmYD7ckPMPMJDUFB5WPsvTE9awyUKx4wNymsXVdQg8GUMc Sun, 26 Feb 2023 20:48:45 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmT4qsndMNfrFQkSa2NntpH622XoSXov98C6NNh7vNim2b +Mon, 27 Feb 2023 11:53:47 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmSVmhWmBWbwuSt4ECwwzU94Q1pz8YnxwWhQTMTNyQyB5b diff --git a/agents/suspicious-amount-agent/src/constants.ts b/agents/suspicious-amount-agent/src/constants.ts index 52324f0..b3d9b22 100644 --- a/agents/suspicious-amount-agent/src/constants.ts +++ b/agents/suspicious-amount-agent/src/constants.ts @@ -9,7 +9,7 @@ const BEP20_TRANSFER_EVENT = const REQUEST_WITHDRAW_EVENT = "event RequestWithdraw(address indexed _account, uint256 _amountInBnbX)"; const REWARD_EVENT = "event Redelegate(uint256 _rewardsId, uint256 _amount)"; -const REWARD_CHANGE_PCT = 20; // 0 - 100 +const REWARD_CHANGE_PCT = 10; // 0 - 100 export const TIMELOCK_SCHEDULE_EVENT = "event CallScheduled(bytes32 indexed id, uint256 indexed index, address target,uint256 value,bytes data,bytes32 predecessor, uint256 delay)"; From 50958848eebc7e835bc8a61afcc65703f718735e Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Mon, 27 Feb 2023 19:49:31 +0530 Subject: [PATCH 7/8] rephrased upgrade alert --- agents/suspicious-amount-agent/publish.log | 1 + agents/suspicious-amount-agent/src/upgrade-proposal.ts | 7 ++++++- agents/suspicious-amount-agent/src/utils.ts | 8 +++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/agents/suspicious-amount-agent/publish.log b/agents/suspicious-amount-agent/publish.log index 0b18a37..29b2caf 100644 --- a/agents/suspicious-amount-agent/publish.log +++ b/agents/suspicious-amount-agent/publish.log @@ -9,3 +9,4 @@ Mon, 03 Oct 2022 19:15:16 GMT: successfully updated agent id 0x1b10e9f5cd672d1b7 Thu, 22 Dec 2022 16:25:27 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmYD7ckPMPMJDUFB5WPsvTE9awyUKx4wNymsXVdQg8GUMc Sun, 26 Feb 2023 20:48:45 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmT4qsndMNfrFQkSa2NntpH622XoSXov98C6NNh7vNim2b Mon, 27 Feb 2023 11:53:47 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmSVmhWmBWbwuSt4ECwwzU94Q1pz8YnxwWhQTMTNyQyB5b +Mon, 27 Feb 2023 14:18:40 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmbB7PwL2GoHeA9X3xbdD5iVDPBTJdH5YMvSMvbNL4vDET diff --git a/agents/suspicious-amount-agent/src/upgrade-proposal.ts b/agents/suspicious-amount-agent/src/upgrade-proposal.ts index 384a236..846581a 100644 --- a/agents/suspicious-amount-agent/src/upgrade-proposal.ts +++ b/agents/suspicious-amount-agent/src/upgrade-proposal.ts @@ -11,6 +11,7 @@ import { TIMELOCK_CONTRACT, TIMELOCK_SCHEDULE_EVENT, } from "./constants"; +import { getHours, getMins } from "./utils"; const handleTransaction: HandleTransaction = async ( txEvent: TransactionEvent @@ -25,10 +26,14 @@ const handleTransaction: HandleTransaction = async ( }); if (upgradeEvents.length) { + const delayInMiliSecs = + parseInt(upgradeEvents[0].args.delay.toString()) * 1000; findings.push( Finding.fromObject({ name: "Proposal Scheduled", - description: `Upgrade Proposal Scheduled. Timelock expires in ${upgradeEvents[0].args.delay.toString()} seconds`, + description: `Upgrade Proposal Scheduled. Timelock expires in ${getHours( + delayInMiliSecs + )} hours ${getMins(delayInMiliSecs) % 60} mins`, alertId: "BNBX-TIMELOCK", protocol: protocol, severity: FindingSeverity.Info, diff --git a/agents/suspicious-amount-agent/src/utils.ts b/agents/suspicious-amount-agent/src/utils.ts index 3f37348..d831eb1 100644 --- a/agents/suspicious-amount-agent/src/utils.ts +++ b/agents/suspicious-amount-agent/src/utils.ts @@ -1,5 +1,7 @@ -const getHours = (miliSecs: number) => { - return miliSecs / (1000 * 60 * 60); +export const getHours = (miliSecs: number) => { + return parseInt((miliSecs / (1000 * 60 * 60)).toString()); }; -export { getHours }; +export const getMins = (miliSecs: number) => { + return parseInt((miliSecs / (1000 * 60)).toString()); +}; From 278cee5e22ef093e037a50fc35d233cdc9fd9aa1 Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Tue, 28 Feb 2023 18:39:36 +0530 Subject: [PATCH 8/8] adding github link on bot page --- agents/suspicious-amount-agent/README.md | 2 +- agents/suspicious-amount-agent/package.json | 4 ++++ agents/suspicious-amount-agent/publish.log | 1 + agents/suspicious-amount-agent/src/upgrade-proposal.ts | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/agents/suspicious-amount-agent/README.md b/agents/suspicious-amount-agent/README.md index cbca6d2..e9733ed 100644 --- a/agents/suspicious-amount-agent/README.md +++ b/agents/suspicious-amount-agent/README.md @@ -51,7 +51,7 @@ - BNBX-TIMELOCK - Fired when contract upgrade proposal is scheduled - - Severity is set to "Info" + - Severity is set to "High" - Type is set to "Info" - metadata: delay - addresses: [timelock, proxy_admin] diff --git a/agents/suspicious-amount-agent/package.json b/agents/suspicious-amount-agent/package.json index ff05058..981fa21 100644 --- a/agents/suspicious-amount-agent/package.json +++ b/agents/suspicious-amount-agent/package.json @@ -2,6 +2,10 @@ "name": "bnbx-suspicious-amount-agent", "version": "0.0.1", "description": "Alerts on suspicious amount of BNBx minted, unstaked, Rewards", + "repository": { + "url": "https://github.com/stader-labs/bnbX/tree/forta-update/agents/suspicious-amount-agent", + "type": "git" + }, "chainIds": [ 56 ], diff --git a/agents/suspicious-amount-agent/publish.log b/agents/suspicious-amount-agent/publish.log index 29b2caf..9cfb535 100644 --- a/agents/suspicious-amount-agent/publish.log +++ b/agents/suspicious-amount-agent/publish.log @@ -10,3 +10,4 @@ Thu, 22 Dec 2022 16:25:27 GMT: successfully updated agent id 0x1b10e9f5cd672d1b7 Sun, 26 Feb 2023 20:48:45 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmT4qsndMNfrFQkSa2NntpH622XoSXov98C6NNh7vNim2b Mon, 27 Feb 2023 11:53:47 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmSVmhWmBWbwuSt4ECwwzU94Q1pz8YnxwWhQTMTNyQyB5b Mon, 27 Feb 2023 14:18:40 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest QmbB7PwL2GoHeA9X3xbdD5iVDPBTJdH5YMvSMvbNL4vDET +Tue, 28 Feb 2023 13:03:07 GMT: successfully updated agent id 0x1b10e9f5cd672d1b759031ac829aaac2d4466ee01724254a62e479259ac03d93 with manifest Qma28fc3A5g9UrM6DdMdgwNaMbFtr5cNRV6JRoyd8Cyoz9 diff --git a/agents/suspicious-amount-agent/src/upgrade-proposal.ts b/agents/suspicious-amount-agent/src/upgrade-proposal.ts index 846581a..8143285 100644 --- a/agents/suspicious-amount-agent/src/upgrade-proposal.ts +++ b/agents/suspicious-amount-agent/src/upgrade-proposal.ts @@ -36,7 +36,7 @@ const handleTransaction: HandleTransaction = async ( )} hours ${getMins(delayInMiliSecs) % 60} mins`, alertId: "BNBX-TIMELOCK", protocol: protocol, - severity: FindingSeverity.Info, + severity: FindingSeverity.High, type: FindingType.Info, metadata: { delay: upgradeEvents[0].args.delay.toString(),