Skip to content

Commit

Permalink
Auto v2 handling (#180)
Browse files Browse the repository at this point in the history
* Auto v2 handling

* updated address and abi

* updated kind name and goerli command address for aave sl

* replaced 0x0 with null

* updated automation bot v2 address

* updated genesis block for auto bot v2 and package
  • Loading branch information
piekczyk authored Feb 7, 2023
1 parent 6aa01fd commit 5c47e81
Show file tree
Hide file tree
Showing 10 changed files with 619 additions and 43 deletions.
11 changes: 10 additions & 1 deletion abis/automation-bot-v2.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@
{ "internalType": "uint256", "name": "triggerType", "type": "uint256" },
{ "internalType": "bool", "name": "continuous", "type": "bool" },
{ "internalType": "uint256", "name": "replacedTriggerId", "type": "uint256" },
{ "internalType": "bytes", "name": "triggerData", "type": "bytes" }
{ "internalType": "bytes", "name": "triggerData", "type": "bytes" },
{ "internalType": "bytes", "name": "replacedTriggerData", "type": "bytes" }
],
"name": "addRecord",
"outputs": [],
Expand All @@ -86,6 +87,7 @@
{ "internalType": "bool[]", "name": "continuous", "type": "bool[]" },
{ "internalType": "uint256[]", "name": "replacedTriggerId", "type": "uint256[]" },
{ "internalType": "bytes[]", "name": "triggerData", "type": "bytes[]" },
{ "internalType": "bytes[]", "name": "replacedTriggerData", "type": "bytes[]" },
{ "internalType": "uint256[]", "name": "triggerTypes", "type": "uint256[]" }
],
"name": "addTriggers",
Expand All @@ -100,6 +102,13 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "clearLock",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint16", "name": "triggerGroupType", "type": "uint16" },
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"@oasisdex/spock-test-utils": "^0.1.1",
"@oasisdex/spock-utils": "^0.1.0",
"@oasisdex/spock-validation": "^0.1.0",
"@oasisdex/automation": "1.3.1-alpha.0",
"abi-decoder": "^1.2.0",
"aws-sdk": "^2.1232.0",
"bignumber.js": "^8.0.2",
Expand Down
1 change: 1 addition & 0 deletions src/addresses/mainnet.json
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,7 @@
"MCD_CLIP_GUNIV3DAIUSDC2_A": "0xB55da3d3100C4eBF9De755b6DdC24BF209f6cc06",
"MCD_CLIP_CALC_GUNIV3DAIUSDC2_A": "0xef051Ca2A2d809ba47ee0FC8caaEd06E3D832225",
"AUTOMATION_BOT": "0x6e87a7a0a03e51a741075fdf4d1fcce39a4df01b",
"AUTOMATION_BOT_V2": "0x8061c24823094E51e57A4a5cF8bEd3CCf09d316F",
"MULTIPLY_PROXY_ACTIONS": "0x2a49eae5cca3f050ebec729cf90cc910fadaf7a2",
"AUTOMATION_AGGREGATOR_BOT": "0x5f1d184204775fBB351C4b2C61a2fD4aAbd3fB76",
"RETH": "0xae78736cd615f374d3085123a210448e74fc6393",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
DROP VIEW api.active_triggers;

ALTER TABLE automation_bot.trigger_added_events
ADD COLUMN proxy_address character varying(66) default null;

CREATE VIEW api.active_triggers as
SELECT added.*
FROM automation_bot.trigger_added_events added
LEFT JOIN automation_bot.trigger_removed_events removed ON added.trigger_id = removed.trigger_id
WHERE removed.trigger_id is null;
46 changes: 35 additions & 11 deletions src/borrow/transformers/automationBotExecutedTransformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import {
import { BlockTransformer } from '@oasisdex/spock-etl/dist/processors/types';
import { LocalServices } from '@oasisdex/spock-etl/dist/services/types';
import { normalizeAddressDefinition } from '../../utils';
import { getMultiplyTransformerName } from './multiply';

const automationBotAbi = require('../../../abis/automation-bot.json');

Expand All @@ -24,6 +23,13 @@ interface Dependencies {
};
}

interface DependenciesV2 {
automationBotV2: {
address: string;
startingBlock: number;
};
}

async function handleTriggerExecuted(
params: Dictionary<any>,
log: PersistedLog,
Expand Down Expand Up @@ -88,23 +94,41 @@ const automationBotExecutedHandlers = {
},
};

export const getAutomationBotExecutedTransformerName = (address: string) =>
`automationBotExecutedTransformer-${address}`;
export const automationBotExecutedTransformer: (
export const getAutomationBotExecutedTransformerName = (address: string, name: string) =>
`${name}-${address}`;

export const automationBotExecutedTransformerName = 'automationBotExecutedTransformer'
export const automationBotV2ExecutedTransformerName = 'automationBotV2ExecutedTransformer'

export const getAutomationBotExecutedTransformer: (
address: string | SimpleProcessorDefinition,
dependencies: Dependencies,
) => BlockTransformer = (address, dependencies) => {
transformerDependencies: string[],
name: string
) => BlockTransformer = (address, transformerDependencies, name) => {
const deps = normalizeAddressDefinition(address);

return {
name: getAutomationBotExecutedTransformerName(deps.address),
name: getAutomationBotExecutedTransformerName(deps.address, name),
dependencies: [getExtractorName(deps.address)],
transformerDependencies: [
`automationBotTransformer-${dependencies.automationBot.address}`,
`automationAggregatorBotTransformer-${dependencies.automationAggregatorBot.address}`,
],
transformerDependencies,
transform: async (services, logs) => {
await handleEvents(services, automationBotAbi, flatten(logs), automationBotExecutedHandlers);
},
};
};


export const automationBotExecutedTransformerV1 = (address: string | SimpleProcessorDefinition,dependencies: Dependencies ) => {
const transformerDependencies = [
`automationBotTransformer-${dependencies.automationBot.address}`,
`automationAggregatorBotTransformer-${dependencies.automationAggregatorBot.address}`,
]
return getAutomationBotExecutedTransformer(address, transformerDependencies, automationBotExecutedTransformerName, )
}

export const automationBotExecutedTransformerV2 = (address: string | SimpleProcessorDefinition,dependencies: DependenciesV2 ) => {
const transformerDependencies = [
`automationBotV2Transformer-${dependencies.automationBotV2.address}`,
]
return getAutomationBotExecutedTransformer(address, transformerDependencies, automationBotV2ExecutedTransformerName, )
}
11 changes: 8 additions & 3 deletions src/borrow/transformers/automationBotTransformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { BlockTransformer } from '@oasisdex/spock-etl/dist/processors/types';
import { LocalServices } from '@oasisdex/spock-etl/dist/services/types';
import { normalizeAddressDefinition } from '../../utils';
import { getMultiplyTransformerName } from './multiply';
import { decodeTriggerDataAsJson } from '@oasisdex/automation';

const automationBotAbi = require('../../../abis/automation-bot.json');
const automationBotV2Abi = require('../../../abis/automation-bot-v2.json');
Expand All @@ -19,10 +20,14 @@ async function handleTriggerAdded(
log: PersistedLog,
services: LocalServices,
) {
const chainId = process.env.VL_CHAIN_NAME === 'mainnet' ? 1 : 5;
const { positionAddress } = decodeTriggerDataAsJson(params.commandAddress.toLowerCase(), chainId, params.triggerData.toString())

const values = {
trigger_id: params.triggerId.toString(),
cdp_id: params.cdpId?params.cdpId.toString():"0",
command_address: params.commandAddress.toLowerCase(),
proxy_address: positionAddress ? positionAddress.toLowerCase() : undefined,
continous: params.continous,
trigger_type: params.triggerType?params.triggerType.toString():undefined,
trigger_data: params.triggerData.toString(),
Expand All @@ -33,9 +38,9 @@ async function handleTriggerAdded(

await services.tx.none(
`INSERT INTO automation_bot.trigger_added_events(
trigger_id, cdp_id, command_address, continous, trigger_type, trigger_data, log_index, tx_id, block_id
trigger_id, cdp_id, command_address, proxy_address, continous, trigger_type, trigger_data, log_index, tx_id, block_id
) VALUES (
\${trigger_id}, \${cdp_id}, \${command_address}, \${continous}, \${trigger_type}, \${trigger_data}, \${log_index}, \${tx_id}, \${block_id}
\${trigger_id}, \${cdp_id}, \${command_address}, \${proxy_address}, \${continous}, \${trigger_type}, \${trigger_data}, \${log_index}, \${tx_id}, \${block_id}
);`,
values,
);
Expand Down Expand Up @@ -124,7 +129,7 @@ export const getAutomationBotTransformerName = (address: string) =>
`automationBotTransformer-${address}`;

export const getAutomationBotV2TransformerName = (address: string) =>
`automationBotF2Transformer-${address}`;
`automationBotV2Transformer-${address}`;

export const automationBotTransformer: (
address: string | SimpleProcessorDefinition,
Expand Down
68 changes: 61 additions & 7 deletions src/borrow/transformers/automationEventEnhancer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,25 @@ import {
updateAutomationRemoveEventsWithEthPrice,
} from '../../utils/pricesDb';
import { Event } from 'src/types/history';
import { getAutomationBotExecutedTransformerName } from './automationBotExecutedTransformer';
import {
automationBotExecutedTransformerName, automationBotV2ExecutedTransformerName,
getAutomationBotExecutedTransformerName,
} from './automationBotExecutedTransformer';

export const automationEventEnhancerEthPriceTransformerName = `automation-event-enhancer-transformer-eth-price`;
export const automationV2EventEnhancerEthPriceTransformerName = `automation-v2-event-enhancer-transformer-eth-price`;

export const automationEventEnhancerTransformerEthPrice: (
automationBotExecutedTransformer: SimpleProcessorDefinition,
oraclesTransformers: string[],
) => BlockTransformer = (automationBotExecutedTransformer, oraclesTransformers) => {
name: string,
executedTransformerName: string,
) => BlockTransformer = (automationBotExecutedTransformer, oraclesTransformers, name, executedTransformerName) => {
return {
name: automationEventEnhancerEthPriceTransformerName,
name,
dependencies: [getExtractorName(automationBotExecutedTransformer.address)],
transformerDependencies: [
getAutomationBotExecutedTransformerName(automationBotExecutedTransformer.address),
getAutomationBotExecutedTransformerName(automationBotExecutedTransformer.address, executedTransformerName),
...oraclesTransformers,
],
startingBlock: automationBotExecutedTransformer.startingBlock,
Expand Down Expand Up @@ -72,15 +78,18 @@ export const automationEventEnhancerTransformerEthPrice: (
};

export const automationEventEnhancerGasPriceName = 'automationEventEnhancerGasPrice';
export const automationV2EventEnhancerGasPriceName = 'automationV2EventEnhancerGasPrice';

export const automationEventEnhancerGasPrice: (
automationBotExecutedTransformer: SimpleProcessorDefinition,
) => BlockTransformer = automationBotExecutedTransformer => {
name: string,
executedTransformerName: string,
) => BlockTransformer = (automationBotExecutedTransformer, name, executedTransformerName) => {
return {
name: automationEventEnhancerGasPriceName,
name,
dependencies: [getExtractorName(automationBotExecutedTransformer.address)],
transformerDependencies: [
getAutomationBotExecutedTransformerName(automationBotExecutedTransformer.address),
getAutomationBotExecutedTransformerName(automationBotExecutedTransformer.address, executedTransformerName),
],
startingBlock: automationBotExecutedTransformer.startingBlock,
transform: async (services, _logs) => {
Expand Down Expand Up @@ -123,3 +132,48 @@ export const automationEventEnhancerGasPrice: (
},
};
};


export const automationEventEnhancerGasPriceV1 = (
automationBotExecutedTransformer: SimpleProcessorDefinition
) => {
return automationEventEnhancerGasPrice(
automationBotExecutedTransformer,
automationEventEnhancerGasPriceName,
automationBotExecutedTransformerName
)
}

export const automationEventEnhancerGasPriceV2 = (
automationBotExecutedTransformer: SimpleProcessorDefinition
) => {
return automationEventEnhancerGasPrice(
automationBotExecutedTransformer,
automationV2EventEnhancerGasPriceName,
automationBotV2ExecutedTransformerName
)
}

export const automationEventEnhancerTransformerEthPriceV1 = (
automationBotExecutedTransformer: SimpleProcessorDefinition,
oraclesTransformers: string[],
) => {
return automationEventEnhancerTransformerEthPrice(
automationBotExecutedTransformer,
oraclesTransformers,
automationEventEnhancerEthPriceTransformerName,
automationBotExecutedTransformerName
)
}

export const automationEventEnhancerTransformerEthPriceV2 = (
automationBotExecutedTransformer: SimpleProcessorDefinition,
oraclesTransformers: string[],
) => {
return automationEventEnhancerTransformerEthPrice(
automationBotExecutedTransformer,
oraclesTransformers,
automationV2EventEnhancerEthPriceTransformerName,
automationBotV2ExecutedTransformerName
)
}
24 changes: 18 additions & 6 deletions src/config.goerli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,10 @@ import {
automationBotTransformer,
automationBotV2Transformer,
} from './borrow/transformers/automationBotTransformer';
import { automationBotExecutedTransformer } from './borrow/transformers/automationBotExecutedTransformer';
import {
automationBotExecutedTransformerV1,
automationBotExecutedTransformerV2,
} from './borrow/transformers/automationBotExecutedTransformer';
import { automationAggregatorBotTransformer } from './borrow/transformers/automationAggregatorBotTransformer';
import { dsProxyTransformer } from './borrow/transformers/dsProxyTransformer';
import { initializeCommandAliases, partialABI } from './utils';
Expand All @@ -57,8 +60,10 @@ import { redeemerTransformer } from './borrow/transformers/referralRedeemer';
import { aaveLendingPoolTransformer } from './borrow/transformers/aaveTransformer';
import { lidoTransformer } from './borrow/transformers/lidoTransformer';
import {
automationEventEnhancerGasPrice,
automationEventEnhancerTransformerEthPrice,
automationEventEnhancerGasPriceV1,
automationEventEnhancerGasPriceV2,
automationEventEnhancerTransformerEthPriceV1,
automationEventEnhancerTransformerEthPriceV2,
} from './borrow/transformers/automationEventEnhancer';

const AutomationBotABI = require('../abis/automation-bot.json');
Expand Down Expand Up @@ -234,6 +239,10 @@ const commandMapping = [
command_address: '0x02B7391cdd0c8A75ecFC278d387e3DCC3d796340',
kind: 'auto-take-profit',
},
{
command_address: '0xe78acea26b79564c4d29d8c1f5bad3d4e0414676',
kind: 'aave-stop-loss',
},
].map(({ command_address, kind }) => ({ command_address: command_address.toLowerCase(), kind }));

const multiply = [
Expand Down Expand Up @@ -338,7 +347,8 @@ export const config: UserProvidedSpockConfig = {
flipNoteTransformer(),
automationBotTransformer(automationBot, multiply),
automationBotV2Transformer(automationBotV2, multiply),
automationBotExecutedTransformer(automationBot, { automationBot, automationAggregatorBot }),
automationBotExecutedTransformerV1(automationBot,{ automationBot, automationAggregatorBot }),
automationBotExecutedTransformerV2(automationBotV2,{ automationBotV2 }),
automationAggregatorBotTransformer(automationAggregatorBot, { automationBot }),
clipperTransformer(dogs.map(dep => getDogTransformerName(dep.address))),
...multiplyTransformer(multiply, {
Expand All @@ -358,8 +368,10 @@ export const config: UserProvidedSpockConfig = {
exchangeAddress: [...exchange],
}),
eventEnhancerGasPrice(vat, cdpManagers),
automationEventEnhancerGasPrice(automationBot),
automationEventEnhancerTransformerEthPrice(automationBot, oraclesTransformers),
automationEventEnhancerGasPriceV1(automationBot),
automationEventEnhancerTransformerEthPriceV1(automationBot, oraclesTransformers),
automationEventEnhancerGasPriceV2(automationBotV2),
automationEventEnhancerTransformerEthPriceV2(automationBotV2, oraclesTransformers),
...redeemerTransformer(redeemer),
...aaveLendingPoolTransformer(aaveLendingPool),
...lidoTransformer(lido),
Expand Down
Loading

0 comments on commit 5c47e81

Please sign in to comment.