Skip to content
This repository was archived by the owner on Aug 12, 2023. It is now read-only.

Commit e96c270

Browse files
authored
Introduce extractor for TransformedERC20 events (#372)
1 parent f5a957b commit e96c270

8 files changed

Lines changed: 114 additions & 1 deletion

File tree

config/default.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ module.exports = {
2424
logFill: {
2525
v1: 4145578,
2626
},
27+
transformedErc20: {
28+
v3: 10247094,
29+
},
2730
},
2831
web3: {
2932
endpoint: process.env.WEB3_ENDPOINT,

packages/core/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"@0x-event-extractor/fill-extractor-v2": "^1.0.0",
88
"@0x-event-extractor/fill-extractor-v3": "^1.0.0",
99
"@0x-event-extractor/shared": "^1.0.0",
10+
"@0x-event-extractor/transformed-erc20-extractor": "^1.0.0",
1011
"@bugsnag/js": "6.5.2",
1112
"bugsnag": "^2.4.3",
1213
"delay": "^4.3.0",

packages/core/src/jobs/extract-events.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const fillExtractorV1 = require('@0x-event-extractor/fill-extractor-v1');
22
const fillExtractorV2 = require('@0x-event-extractor/fill-extractor-v2');
33
const fillExtractorV3 = require('@0x-event-extractor/fill-extractor-v3');
4+
const transformedERC20Extractor = require('@0x-event-extractor/transformed-erc20-extractor');
45

56
const { getLogger } = require('../util/logging');
67
const BlockRange = require('../model/block-range');
@@ -109,6 +110,7 @@ const extractEvents = async () => {
109110
await performExtraction(currentBlock, fillExtractorV1);
110111
await performExtraction(currentBlock, fillExtractorV2);
111112
await performExtraction(currentBlock, fillExtractorV3);
113+
await performExtraction(currentBlock, transformedERC20Extractor);
112114

113115
logger.info('finished event extraction');
114116
};

packages/shared/src/web3.js

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ const { providerUtils } = require('@0x/utils');
44

55
let wrapper;
66
let providerEngine;
7-
87
/**
98
* Initializes a web3 provider engine and create a reusable web3 wrapper. The
109
* singletons can be accessed via getProviderEngine and getWrapper respectively.
@@ -16,11 +15,57 @@ const configure = ({ endpoint }) => {
1615
providerEngine = new Web3ProviderEngine();
1716
wrapper = new Web3Wrapper(providerEngine);
1817

18+
wrapper.abiDecoder.addABI([
19+
{
20+
anonymous: false,
21+
inputs: [
22+
{
23+
indexed: true,
24+
internalType: 'address',
25+
name: 'taker',
26+
type: 'address',
27+
},
28+
{
29+
indexed: false,
30+
internalType: 'address',
31+
name: 'inputToken',
32+
type: 'address',
33+
},
34+
{
35+
indexed: false,
36+
internalType: 'address',
37+
name: 'outputToken',
38+
type: 'address',
39+
},
40+
{
41+
indexed: false,
42+
internalType: 'uint256',
43+
name: 'inputTokenAmount',
44+
type: 'uint256',
45+
},
46+
{
47+
indexed: false,
48+
internalType: 'uint256',
49+
name: 'outputTokenAmount',
50+
type: 'uint256',
51+
},
52+
],
53+
name: 'TransformedERC20',
54+
type: 'event',
55+
},
56+
]);
57+
1958
providerEngine.addProvider(new RPCSubprovider(endpoint));
2059
providerUtils.startProviderEngine(providerEngine);
2160
};
2261

62+
/**
63+
* Get the current global web3 wrapper instance.
64+
*
65+
* @returns {Web3Wrapper}
66+
*/
2367
const getWrapper = () => wrapper;
68+
2469
const getProviderEngine = () => providerEngine;
2570

2671
module.exports = { configure, getProviderEngine, getWrapper };
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"name": "@0x-event-extractor/transformed-erc20-extractor",
3+
"description": "Extractor for exchange proxy ERC20 transform events",
4+
"version": "1.0.0",
5+
"main": "src/index.js",
6+
"dependencies": {
7+
"@0x-event-extractor/shared": "^1.0.0"
8+
}
9+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
const { web3 } = require('@0x-event-extractor/shared');
2+
3+
const EXCHANGE_PROXY_ADDRESS = '0xdef1c0ded9bec7f1a1670819833240f027b25eff';
4+
const TRANSFORMED_ERC20_EVENT_TOPIC =
5+
'0x0f6672f78a59ba8e5e5b5d38df3ebc67f3c792e2c9259b8d97d7f00dd78ba1b3';
6+
7+
const fetchEvents = async (fromBlock, toBlock) => {
8+
const logs = await web3.getWrapper().getLogsAsync({
9+
address: EXCHANGE_PROXY_ADDRESS,
10+
fromBlock,
11+
toBlock,
12+
topics: [TRANSFORMED_ERC20_EVENT_TOPIC],
13+
});
14+
15+
return logs;
16+
};
17+
18+
module.exports = fetchEvents;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const { web3 } = require('@0x-event-extractor/shared');
2+
3+
const getEventData = logEntry => {
4+
const decoded = web3.getWrapper().abiDecoder.tryToDecodeLogOrNoop(logEntry);
5+
6+
const {
7+
inputToken,
8+
inputTokenAmount,
9+
outputToken,
10+
outputTokenAmount,
11+
taker,
12+
} = decoded.args;
13+
14+
const eventData = {
15+
inputToken,
16+
inputTokenAmount: inputTokenAmount.toString(),
17+
outputToken,
18+
outputTokenAmount: outputTokenAmount.toString(),
19+
taker,
20+
};
21+
22+
return eventData;
23+
};
24+
25+
module.exports = getEventData;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const fetchLogEntries = require('./fetch-log-entries');
2+
const getEventData = require('./get-event-data');
3+
4+
module.exports = {
5+
configure: () => {},
6+
eventType: 'TransformedERC20',
7+
fetchLogEntries,
8+
getEventData,
9+
protocolVersion: 3,
10+
};

0 commit comments

Comments
 (0)