@sentio/sdk 1.36.4 → 1.37.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/aptos/api.d.ts +1 -1
- package/lib/aptos/api.js +1 -1
- package/lib/aptos/api.js.map +1 -1
- package/lib/aptos/aptos-plugin.d.ts +2 -2
- package/lib/aptos/aptos-plugin.js +14 -19
- package/lib/aptos/aptos-plugin.js.map +1 -1
- package/lib/aptos/aptos-processor.d.ts +2 -2
- package/lib/aptos/aptos-processor.js +3 -3
- package/lib/aptos/aptos-processor.js.map +1 -1
- package/lib/aptos/context.d.ts +1 -1
- package/lib/aptos/context.js +2 -6
- package/lib/aptos/context.js.map +1 -1
- package/lib/binds.d.ts +1 -1
- package/lib/binds.js +2 -2
- package/lib/binds.js.map +1 -1
- package/lib/builtin/internal/eacaggregatorproxy_processor.js +18 -18
- package/lib/builtin/internal/eacaggregatorproxy_processor.js.map +1 -1
- package/lib/builtin/internal/erc1155_processor.js +5 -5
- package/lib/builtin/internal/erc1155_processor.js.map +1 -1
- package/lib/builtin/internal/erc20_processor.js +8 -8
- package/lib/builtin/internal/erc20_processor.js.map +1 -1
- package/lib/builtin/internal/erc20bytes_processor.js +6 -6
- package/lib/builtin/internal/erc20bytes_processor.js.map +1 -1
- package/lib/builtin/internal/erc721_processor.js +9 -9
- package/lib/builtin/internal/erc721_processor.js.map +1 -1
- package/lib/builtin/internal/weth9_processor.js +6 -6
- package/lib/builtin/internal/weth9_processor.js.map +1 -1
- package/lib/builtin/solana/wormhole-processor.d.ts +0 -4
- package/lib/builtin/solana/wormhole-processor.js +123 -50
- package/lib/builtin/solana/wormhole-processor.js.map +1 -1
- package/lib/core/account-processor.d.ts +1 -1
- package/lib/core/account-processor.js +2 -2
- package/lib/core/account-processor.js.map +1 -1
- package/lib/core/base-context.d.ts +1 -1
- package/lib/core/base-context.js.map +1 -1
- package/lib/core/base-processor-template.d.ts +2 -2
- package/lib/core/base-processor-template.js +7 -21
- package/lib/core/base-processor-template.js.map +1 -1
- package/lib/core/base-processor.d.ts +1 -1
- package/lib/core/base-processor.js +6 -20
- package/lib/core/base-processor.js.map +1 -1
- package/lib/core/bind-options.d.ts +5 -6
- package/lib/core/bind-options.js.map +1 -1
- package/lib/core/context.d.ts +4 -5
- package/lib/core/context.js +6 -10
- package/lib/core/context.js.map +1 -1
- package/lib/core/eth-plugin.d.ts +2 -2
- package/lib/core/eth-plugin.js +8 -12
- package/lib/core/eth-plugin.js.map +1 -1
- package/lib/core/event-tracker.d.ts +1 -1
- package/lib/core/event-tracker.js +2 -2
- package/lib/core/event-tracker.js.map +1 -1
- package/lib/core/exporter.d.ts +1 -1
- package/lib/core/exporter.js +2 -2
- package/lib/core/exporter.js.map +1 -1
- package/lib/core/generic-processor.test.js.map +1 -1
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.js +2 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/logger.d.ts +1 -1
- package/lib/core/logger.js +5 -5
- package/lib/core/logger.js.map +1 -1
- package/lib/core/meter.d.ts +2 -2
- package/lib/core/meter.js +10 -10
- package/lib/core/meter.js.map +1 -1
- package/lib/core/numberish.d.ts +4 -4
- package/lib/core/numberish.js +23 -25
- package/lib/core/numberish.js.map +1 -1
- package/lib/core/numberish.test.js.map +1 -1
- package/lib/core/solana-context.d.ts +2 -3
- package/lib/core/solana-context.js.map +1 -1
- package/lib/core/solana-options.d.ts +2 -3
- package/lib/core/solana-options.js.map +1 -1
- package/lib/core/solana-plugin.d.ts +2 -2
- package/lib/core/solana-plugin.js +6 -6
- package/lib/core/solana-plugin.js.map +1 -1
- package/lib/core/solana-processor.d.ts +7 -8
- package/lib/core/solana-processor.js +5 -15
- package/lib/core/solana-processor.js.map +1 -1
- package/lib/core/sui-plugin.d.ts +2 -2
- package/lib/core/sui-plugin.js +5 -5
- package/lib/core/sui-plugin.js.map +1 -1
- package/lib/core/sui-processor.d.ts +8 -9
- package/lib/core/sui-processor.js +5 -15
- package/lib/core/sui-processor.js.map +1 -1
- package/lib/index.d.ts +2 -3
- package/lib/index.js +3 -5
- package/lib/index.js.map +1 -1
- package/lib/processor-runner.js +4 -4
- package/lib/processor-runner.js.map +1 -1
- package/lib/service.d.ts +3 -4
- package/lib/service.js +7 -11
- package/lib/service.js.map +1 -1
- package/lib/solana-codegen/codegen.js +16 -5
- package/lib/solana-codegen/codegen.js.map +1 -1
- package/lib/target-ethers-sentio/file.js +1 -0
- package/lib/target-ethers-sentio/file.js.map +1 -1
- package/lib/target-ethers-sentio/view-function.js +1 -1
- package/lib/testing/metric-utils.d.ts +1 -1
- package/lib/testing/metric-utils.js.map +1 -1
- package/lib/testing/test-processor-server.d.ts +3 -3
- package/lib/testing/test-processor-server.js +10 -22
- package/lib/testing/test-processor-server.js.map +1 -1
- package/lib/utils/conversion.d.ts +1 -1
- package/lib/utils/conversion.js.map +1 -1
- package/lib/utils/dex-price.test.js.map +1 -1
- package/lib/utils/erc20.test.js.map +1 -1
- package/lib/utils/price.d.ts +10 -10
- package/lib/utils/price.js +1 -1
- package/lib/utils/price.js.map +1 -1
- package/package.json +5 -2
- package/src/aptos/api.ts +1 -1
- package/src/aptos/aptos-plugin.ts +10 -11
- package/src/aptos/aptos-processor.ts +2 -2
- package/src/aptos/context.ts +3 -4
- package/src/binds.ts +1 -1
- package/src/builtin/internal/eacaggregatorproxy_processor.ts +19 -18
- package/src/builtin/internal/erc1155_processor.ts +6 -5
- package/src/builtin/internal/erc20_processor.ts +9 -8
- package/src/builtin/internal/erc20bytes_processor.ts +7 -6
- package/src/builtin/internal/erc721_processor.ts +10 -9
- package/src/builtin/internal/weth9_processor.ts +7 -6
- package/src/builtin/solana/wormhole-processor.ts +119 -28
- package/src/core/account-processor.ts +1 -1
- package/src/core/base-context.ts +1 -1
- package/src/core/base-processor-template.ts +6 -15
- package/src/core/base-processor.ts +4 -13
- package/src/core/bind-options.ts +5 -6
- package/src/core/context.ts +10 -11
- package/src/core/eth-plugin.ts +3 -4
- package/src/core/event-tracker.ts +2 -2
- package/src/core/exporter.ts +1 -1
- package/src/core/index.ts +1 -1
- package/src/core/logger.ts +1 -1
- package/src/core/meter.ts +2 -2
- package/src/core/numberish.ts +20 -21
- package/src/core/solana-context.ts +2 -3
- package/src/core/solana-options.ts +2 -4
- package/src/core/solana-plugin.ts +3 -3
- package/src/core/solana-processor.ts +10 -17
- package/src/core/sui-plugin.ts +3 -8
- package/src/core/sui-processor.ts +11 -18
- package/src/index.ts +3 -5
- package/src/processor-runner.ts +3 -3
- package/src/service.ts +5 -5
- package/src/solana-codegen/codegen.ts +20 -7
- package/src/target-ethers-sentio/file.ts +1 -0
- package/src/target-ethers-sentio/view-function.ts +1 -1
- package/src/testing/metric-utils.ts +1 -1
- package/src/testing/test-processor-server.ts +6 -16
- package/src/types/global.d.ts +2 -2
- package/src/utils/conversion.ts +1 -1
- package/src/utils/price.ts +1 -1
- package/lib/gen/builtin.d.ts +0 -6
- package/lib/gen/builtin.js +0 -3
- package/lib/gen/builtin.js.map +0 -1
- package/lib/gen/chainquery/protos/chainquery.d.ts +0 -400
- package/lib/gen/chainquery/protos/chainquery.js +0 -972
- package/lib/gen/chainquery/protos/chainquery.js.map +0 -1
- package/lib/gen/google/protobuf/empty.d.ts +0 -16
- package/lib/gen/google/protobuf/empty.js +0 -47
- package/lib/gen/google/protobuf/empty.js.map +0 -1
- package/lib/gen/google/protobuf/struct.d.ts +0 -73
- package/lib/gen/google/protobuf/struct.js +0 -371
- package/lib/gen/google/protobuf/struct.js.map +0 -1
- package/lib/gen/google/protobuf/timestamp.d.ts +0 -18
- package/lib/gen/google/protobuf/timestamp.js +0 -71
- package/lib/gen/google/protobuf/timestamp.js.map +0 -1
- package/lib/gen/index.d.ts +0 -2
- package/lib/gen/index.js +0 -19
- package/lib/gen/index.js.map +0 -1
- package/lib/gen/processor/protos/processor.d.ts +0 -826
- package/lib/gen/processor/protos/processor.js +0 -3988
- package/lib/gen/processor/protos/processor.js.map +0 -1
- package/lib/gen/service/price/protos/price.d.ts +0 -85
- package/lib/gen/service/price/protos/price.js +0 -269
- package/lib/gen/service/price/protos/price.js.map +0 -1
- package/lib/plugin.d.ts +0 -15
- package/lib/plugin.js +0 -32
- package/lib/plugin.js.map +0 -1
- package/lib/state/processor-state.d.ts +0 -3
- package/lib/state/processor-state.js +0 -8
- package/lib/state/processor-state.js.map +0 -1
- package/lib/state/state-storage.d.ts +0 -17
- package/lib/state/state-storage.js +0 -60
- package/lib/state/state-storage.js.map +0 -1
- package/lib/state/state-storage.test.d.ts +0 -1
- package/lib/state/state-storage.test.js.map +0 -1
- package/src/gen/builtin.ts +0 -22
- package/src/gen/chainquery/protos/chainquery.ts +0 -1212
- package/src/gen/google/protobuf/empty.ts +0 -58
- package/src/gen/google/protobuf/struct.ts +0 -422
- package/src/gen/google/protobuf/timestamp.ts +0 -85
- package/src/gen/index.ts +0 -3
- package/src/gen/processor/protos/processor.ts +0 -4619
- package/src/gen/service/price/protos/price.ts +0 -329
- package/src/plugin.ts +0 -41
- package/src/state/processor-state.ts +0 -3
- package/src/state/state-storage.ts +0 -65
|
@@ -1,26 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
24
7
|
};
|
|
25
8
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
9
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -28,8 +11,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
28
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
12
|
exports.TokenBridgeProcessor = void 0;
|
|
30
13
|
const sdk_1 = require("@sentio/sdk");
|
|
31
|
-
const borsh = __importStar(require("@coral-xyz/borsh"));
|
|
32
14
|
const bs58_1 = __importDefault(require("bs58"));
|
|
15
|
+
const borsh_1 = require("@dao-xyz/borsh");
|
|
33
16
|
// https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/lib.rs#L100
|
|
34
17
|
var TokenBridgeInstruction;
|
|
35
18
|
(function (TokenBridgeInstruction) {
|
|
@@ -47,29 +30,113 @@ var TokenBridgeInstruction;
|
|
|
47
30
|
TokenBridgeInstruction[TokenBridgeInstruction["TransferWrappedWithPayload"] = 11] = "TransferWrappedWithPayload";
|
|
48
31
|
TokenBridgeInstruction[TokenBridgeInstruction["TransferNativeWithPayload"] = 12] = "TransferNativeWithPayload";
|
|
49
32
|
})(TokenBridgeInstruction || (TokenBridgeInstruction = {}));
|
|
33
|
+
class TransferDataValues {
|
|
34
|
+
nonce;
|
|
35
|
+
amount;
|
|
36
|
+
fee;
|
|
37
|
+
target_address;
|
|
38
|
+
target_chain;
|
|
39
|
+
constructor(data) {
|
|
40
|
+
if (data) {
|
|
41
|
+
Object.assign(this, data);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, borsh_1.field)({ type: 'u32' })
|
|
47
|
+
], TransferDataValues.prototype, "nonce", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
(0, borsh_1.field)({ type: 'u64' })
|
|
50
|
+
], TransferDataValues.prototype, "amount", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
(0, borsh_1.field)({ type: 'u64' })
|
|
53
|
+
], TransferDataValues.prototype, "fee", void 0);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, borsh_1.field)({ type: (0, borsh_1.fixedArray)('u8', 32) })
|
|
56
|
+
], TransferDataValues.prototype, "target_address", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, borsh_1.field)({ type: 'u16' })
|
|
59
|
+
], TransferDataValues.prototype, "target_chain", void 0);
|
|
60
|
+
class TransferNativeWithPayloadData {
|
|
61
|
+
nonce;
|
|
62
|
+
amount;
|
|
63
|
+
fee;
|
|
64
|
+
target_address;
|
|
65
|
+
target_chain;
|
|
66
|
+
payload;
|
|
67
|
+
cpi_program_id;
|
|
68
|
+
constructor(data) {
|
|
69
|
+
if (data) {
|
|
70
|
+
Object.assign(this, data);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
__decorate([
|
|
75
|
+
(0, borsh_1.field)({ type: 'u32' })
|
|
76
|
+
], TransferNativeWithPayloadData.prototype, "nonce", void 0);
|
|
77
|
+
__decorate([
|
|
78
|
+
(0, borsh_1.field)({ type: 'u64' })
|
|
79
|
+
], TransferNativeWithPayloadData.prototype, "amount", void 0);
|
|
80
|
+
__decorate([
|
|
81
|
+
(0, borsh_1.field)({ type: 'u64' })
|
|
82
|
+
], TransferNativeWithPayloadData.prototype, "fee", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, borsh_1.field)({ type: (0, borsh_1.fixedArray)('u8', 32) })
|
|
85
|
+
], TransferNativeWithPayloadData.prototype, "target_address", void 0);
|
|
86
|
+
__decorate([
|
|
87
|
+
(0, borsh_1.field)({ type: 'u16' })
|
|
88
|
+
], TransferNativeWithPayloadData.prototype, "target_chain", void 0);
|
|
89
|
+
__decorate([
|
|
90
|
+
(0, borsh_1.field)({ type: (0, borsh_1.vec)('u8') })
|
|
91
|
+
], TransferNativeWithPayloadData.prototype, "payload", void 0);
|
|
92
|
+
__decorate([
|
|
93
|
+
(0, borsh_1.field)({ type: (0, borsh_1.option)((0, borsh_1.fixedArray)('u8', 32)) })
|
|
94
|
+
], TransferNativeWithPayloadData.prototype, "cpi_program_id", void 0);
|
|
95
|
+
class AttestTokenValues {
|
|
96
|
+
nonce;
|
|
97
|
+
constructor(data) {
|
|
98
|
+
if (data) {
|
|
99
|
+
Object.assign(this, data);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
__decorate([
|
|
104
|
+
(0, borsh_1.field)({ type: 'u32' })
|
|
105
|
+
], AttestTokenValues.prototype, "nonce", void 0);
|
|
106
|
+
class InitializeDataValues {
|
|
107
|
+
bridge;
|
|
108
|
+
constructor(data) {
|
|
109
|
+
if (data) {
|
|
110
|
+
Object.assign(this, data);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
__decorate([
|
|
115
|
+
(0, borsh_1.field)({ type: (0, borsh_1.fixedArray)('u8', 32) })
|
|
116
|
+
], InitializeDataValues.prototype, "bridge", void 0);
|
|
50
117
|
class TokenBridgeProcessor extends sdk_1.SolanaBaseProcessor {
|
|
51
|
-
transferDataValues = [
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
]
|
|
118
|
+
// private readonly transferDataValues = [
|
|
119
|
+
// borsh.u32('nonce'),
|
|
120
|
+
// borsh.u64('amount'),
|
|
121
|
+
// borsh.u64('fee'),
|
|
122
|
+
// borsh.array(borsh.u8(undefined), 32, 'target_address'),
|
|
123
|
+
// borsh.u16('target_chain')
|
|
124
|
+
// ]
|
|
58
125
|
// https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/api/transfer_payload.rs#L170
|
|
59
|
-
transferDataWithPayloadValues = [
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
]
|
|
67
|
-
attestTokenValues = [
|
|
68
|
-
|
|
69
|
-
]
|
|
70
|
-
initializeDataValues = [
|
|
71
|
-
|
|
72
|
-
]
|
|
126
|
+
// private readonly transferDataWithPayloadValues = [
|
|
127
|
+
// borsh.u32('nonce'),
|
|
128
|
+
// borsh.u64('amount'),
|
|
129
|
+
// borsh.array(borsh.u8(undefined), 32, 'target_address'),
|
|
130
|
+
// borsh.u16('target_chain'),
|
|
131
|
+
// borsh.vecU8('payload'),
|
|
132
|
+
// borsh.option(borsh.publicKey(undefined), 'cpi_program_id')
|
|
133
|
+
// ]
|
|
134
|
+
// private readonly attestTokenValues = [
|
|
135
|
+
// borsh.u32('nonce')
|
|
136
|
+
// ]
|
|
137
|
+
// private readonly initializeDataValues = [
|
|
138
|
+
// borsh.publicKey('bridge')
|
|
139
|
+
// ]
|
|
73
140
|
static bind(options) {
|
|
74
141
|
if (options && !options.name) {
|
|
75
142
|
options.name = 'WormholeTokenBridge';
|
|
@@ -90,39 +157,45 @@ class TokenBridgeProcessor extends sdk_1.SolanaBaseProcessor {
|
|
|
90
157
|
name: TokenBridgeInstruction[TokenBridgeInstruction.Initialize]
|
|
91
158
|
};
|
|
92
159
|
case TokenBridgeInstruction.TransferNative:
|
|
160
|
+
data = (0, borsh_1.deserialize)(Buffer.from(u8Arr.slice(1)), TransferDataValues);
|
|
93
161
|
// struct is defined at: https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/api/transfer.rs#L295
|
|
94
|
-
data = borsh.struct(this.transferDataValues, 'TransferNativeData').decode(Buffer.from(u8Arr.slice(1)))
|
|
162
|
+
// data = borsh.struct(this.transferDataValues, 'TransferNativeData').decode(Buffer.from(u8Arr.slice(1)))
|
|
95
163
|
return {
|
|
96
164
|
data,
|
|
97
165
|
name: TokenBridgeInstruction[TokenBridgeInstruction.TransferNative]
|
|
98
166
|
};
|
|
99
167
|
case TokenBridgeInstruction.TransferWrapped:
|
|
168
|
+
data = (0, borsh_1.deserialize)(Buffer.from(u8Arr.slice(1)), TransferDataValues);
|
|
100
169
|
// stuct is defined at: https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/api/transfer.rs#L295
|
|
101
|
-
data = borsh.struct(this.transferDataValues, 'TransferWrappedData').decode(Buffer.from(u8Arr.slice(1)))
|
|
170
|
+
// data = borsh.struct(this.transferDataValues, 'TransferWrappedData').decode(Buffer.from(u8Arr.slice(1)))
|
|
102
171
|
return {
|
|
103
172
|
data,
|
|
104
173
|
name: TokenBridgeInstruction[TokenBridgeInstruction.TransferWrapped]
|
|
105
174
|
};
|
|
106
175
|
case TokenBridgeInstruction.TransferNativeWithPayload:
|
|
107
|
-
data =
|
|
176
|
+
data = (0, borsh_1.deserialize)(Buffer.from(u8Arr.slice(1)), TransferNativeWithPayloadData);
|
|
177
|
+
// data = borsh.struct(this.transferDataWithPayloadValues, 'TransferNativeWithPayloadData').decode(Buffer.from(u8Arr.slice(1)))
|
|
108
178
|
return {
|
|
109
179
|
data,
|
|
110
180
|
name: TokenBridgeInstruction[TokenBridgeInstruction.TransferNativeWithPayload]
|
|
111
181
|
};
|
|
112
182
|
case TokenBridgeInstruction.TransferWrappedWithPayload:
|
|
113
|
-
data =
|
|
183
|
+
data = (0, borsh_1.deserialize)(Buffer.from(u8Arr.slice(1)), TransferNativeWithPayloadData);
|
|
184
|
+
// data = borsh.struct(this.transferDataWithPayloadValues, 'TransferWrappedWithPayloadData').decode(Buffer.from(u8Arr.slice(1)))
|
|
114
185
|
return {
|
|
115
186
|
data,
|
|
116
187
|
name: TokenBridgeInstruction[TokenBridgeInstruction.TransferWrappedWithPayload]
|
|
117
188
|
};
|
|
118
189
|
case TokenBridgeInstruction.Initialize:
|
|
119
|
-
data =
|
|
190
|
+
data = (0, borsh_1.deserialize)(Buffer.from(u8Arr.slice(1)), InitializeDataValues);
|
|
191
|
+
// data = borsh.struct(this.initializeDataValues, 'InitializeData').decode(Buffer.from(u8Arr.slice(1)))
|
|
120
192
|
return {
|
|
121
193
|
data,
|
|
122
194
|
name: TokenBridgeInstruction[TokenBridgeInstruction.Initialize]
|
|
123
195
|
};
|
|
124
196
|
case TokenBridgeInstruction.AttestToken:
|
|
125
|
-
data =
|
|
197
|
+
data = (0, borsh_1.deserialize)(Buffer.from(u8Arr.slice(1)), AttestTokenValues);
|
|
198
|
+
// data = borsh.struct(this.attestTokenValues, 'AttestTokenData').decode(Buffer.from(u8Arr.slice(1)))
|
|
126
199
|
return {
|
|
127
200
|
data,
|
|
128
201
|
name: TokenBridgeInstruction[TokenBridgeInstruction.AttestToken]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wormhole-processor.js","sourceRoot":"","sources":["../../../src/builtin/solana/wormhole-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { SolanaBaseProcessor, SolanaContext, SolanaBindOptions } from '@sentio/sdk'\nimport { Instruction } from '@project-serum/anchor'\nimport * as borsh from \"@coral-xyz/borsh\";\nimport bs58 from 'bs58'\n\n// https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/lib.rs#L100\nenum TokenBridgeInstruction {\n Initialize = 0,\n AttestToken,\n CompleteNative, // no args\n CompleteWrapped, // no args\n TransferWrapped,\n TransferNative,\n RegisterChain, // no args\n CreateWrapped, // no args\n UpgradeContract, // no args\n CompleteNativeWithPayload, // no args\n CompleteWrappedWithPayload, // no args\n TransferWrappedWithPayload,\n TransferNativeWithPayload,\n}\n\nexport class TokenBridgeProcessor extends SolanaBaseProcessor {\n\n private readonly transferDataValues = [\n borsh.u32('nonce'),\n borsh.u64('amount'),\n borsh.u64('fee'),\n borsh.array(borsh.u8(undefined), 32, 'target_address'),\n borsh.u16('target_chain')\n ]\n // https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/api/transfer_payload.rs#L170\n private readonly transferDataWithPayloadValues = [\n borsh.u32('nonce'),\n borsh.u64('amount'),\n borsh.array(borsh.u8(undefined), 32, 'target_address'),\n borsh.u16('target_chain'),\n borsh.vecU8('payload'),\n borsh.option(borsh.publicKey(undefined), 'cpi_program_id')\n ]\n private readonly attestTokenValues = [\n borsh.u32('nonce')\n ]\n private readonly initializeDataValues = [\n borsh.publicKey('bridge')\n ]\n\n static bind(options: SolanaBindOptions): TokenBridgeProcessor {\n if (options && !options.name) {\n options.name = 'WormholeTokenBridge'\n }\n return new TokenBridgeProcessor(options)\n }\n\n decodeInstruction: (rawInstruction: string) => Instruction | null = (ins) => {\n const u8Arr = bs58.decode(ins)\n if (u8Arr.length === 0) {\n return null\n }\n\n let data: any\n // wormhole pass intruction's enum value as its first instrcution data\n switch (u8Arr[0]) {\n case TokenBridgeInstruction.Initialize:\n return {\n data: '',\n name: TokenBridgeInstruction[TokenBridgeInstruction.Initialize]\n }\n case TokenBridgeInstruction.TransferNative:\n // struct is defined at: https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/api/transfer.rs#L295\n data = borsh.struct(this.transferDataValues, 'TransferNativeData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.TransferNative]\n }\n case TokenBridgeInstruction.TransferWrapped:\n // stuct is defined at: https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/api/transfer.rs#L295\n data = borsh.struct(this.transferDataValues, 'TransferWrappedData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.TransferWrapped]\n }\n case TokenBridgeInstruction.TransferNativeWithPayload:\n data = borsh.struct(this.transferDataWithPayloadValues, 'TransferNativeWithPayloadData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.TransferNativeWithPayload]\n }\n case TokenBridgeInstruction.TransferWrappedWithPayload:\n data = borsh.struct(this.transferDataWithPayloadValues, 'TransferWrappedWithPayloadData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.TransferWrappedWithPayload]\n }\n case TokenBridgeInstruction.Initialize:\n data = borsh.struct(this.initializeDataValues, 'InitializeData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.Initialize]\n }\n case TokenBridgeInstruction.AttestToken:\n data = borsh.struct(this.attestTokenValues, 'AttestTokenData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.AttestToken]\n }\n case TokenBridgeInstruction.CompleteNative:\n case TokenBridgeInstruction.CompleteNativeWithPayload:\n case TokenBridgeInstruction.CompleteWrapped:\n case TokenBridgeInstruction.CompleteWrappedWithPayload:\n case TokenBridgeInstruction.CreateWrapped:\n case TokenBridgeInstruction.UpgradeContract:\n case TokenBridgeInstruction.RegisterChain:\n return {\n data: '',\n name: TokenBridgeInstruction[u8Arr[0]]\n }\n\n default:\n return null\n }\n }\n\n onInitialize(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('Initialize', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n\n onAttestToken(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('AttestToken', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n\n\n onTransferWrapped(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('TransferWrapped', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n\n onTransferNativeWithPayload(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('TransferNativeWithPayload', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n\n onTransferWrappedWithPaylod(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('TransferWrappedWithPaylod', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n\n onTransferNative(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('TransferNative', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"wormhole-processor.js","sourceRoot":"","sources":["../../../src/builtin/solana/wormhole-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { SolanaBaseProcessor, SolanaContext, SolanaBindOptions } from '@sentio/sdk'\nimport { Instruction } from '@project-serum/anchor'\nimport bs58 from 'bs58'\n\nimport {\n deserialize,\n field,\n vec, fixedArray, option,\n} from \"@dao-xyz/borsh\";\n\n// https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/lib.rs#L100\nenum TokenBridgeInstruction {\n Initialize = 0,\n AttestToken,\n CompleteNative, // no args\n CompleteWrapped, // no args\n TransferWrapped,\n TransferNative,\n RegisterChain, // no args\n CreateWrapped, // no args\n UpgradeContract, // no args\n CompleteNativeWithPayload, // no args\n CompleteWrappedWithPayload, // no args\n TransferWrappedWithPayload,\n TransferNativeWithPayload,\n}\n\nclass TransferDataValues {\n @field({ type: 'u32' })\n nonce: number\n\n @field({type: 'u64'})\n amount: bigint\n\n @field({type: 'u64'})\n fee: bigint\n\n @field({ type: fixedArray('u8', 32) })\n target_address: number[];\n\n @field({ type: 'u16' })\n target_chain: number\n\n constructor(data?: TransferDataValues) {\n if(data){\n Object.assign(this,data)\n }\n }\n}\n\nclass TransferNativeWithPayloadData {\n @field({ type: 'u32' })\n nonce: number\n\n @field({type: 'u64'})\n amount: bigint\n\n @field({type: 'u64'})\n fee: bigint\n\n @field({ type: fixedArray('u8', 32) })\n target_address: number[];\n\n @field({ type: 'u16' })\n target_chain: number\n\n @field({ type: vec('u8') })\n payload: number[];\n\n @field({type: option(fixedArray('u8', 32) )})\n cpi_program_id?: number[]\n\n constructor(data?: TransferNativeWithPayloadData) {\n if(data){\n Object.assign(this,data)\n }\n }\n}\n\nclass AttestTokenValues {\n @field({ type: 'u32' })\n nonce: number\n\n constructor(data?: AttestTokenValues) {\n if(data){\n Object.assign(this,data)\n }\n }\n}\n\nclass InitializeDataValues {\n @field({type: fixedArray('u8', 32) })\n bridge: number[]\n\n constructor(data?: InitializeDataValues) {\n if(data){\n Object.assign(this,data)\n }\n }\n}\n\nexport class TokenBridgeProcessor extends SolanaBaseProcessor {\n\n // private readonly transferDataValues = [\n // borsh.u32('nonce'),\n // borsh.u64('amount'),\n // borsh.u64('fee'),\n // borsh.array(borsh.u8(undefined), 32, 'target_address'),\n // borsh.u16('target_chain')\n // ]\n // https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/api/transfer_payload.rs#L170\n // private readonly transferDataWithPayloadValues = [\n // borsh.u32('nonce'),\n // borsh.u64('amount'),\n // borsh.array(borsh.u8(undefined), 32, 'target_address'),\n // borsh.u16('target_chain'),\n // borsh.vecU8('payload'),\n // borsh.option(borsh.publicKey(undefined), 'cpi_program_id')\n // ]\n // private readonly attestTokenValues = [\n // borsh.u32('nonce')\n // ]\n // private readonly initializeDataValues = [\n // borsh.publicKey('bridge')\n // ]\n\n static bind(options: SolanaBindOptions): TokenBridgeProcessor {\n if (options && !options.name) {\n options.name = 'WormholeTokenBridge'\n }\n return new TokenBridgeProcessor(options)\n }\n\n decodeInstruction: (rawInstruction: string) => Instruction | null = (ins) => {\n const u8Arr = bs58.decode(ins)\n if (u8Arr.length === 0) {\n return null\n }\n\n let data: any\n // wormhole pass intruction's enum value as its first instrcution data\n switch (u8Arr[0]) {\n case TokenBridgeInstruction.Initialize:\n return {\n data: '',\n name: TokenBridgeInstruction[TokenBridgeInstruction.Initialize]\n }\n case TokenBridgeInstruction.TransferNative:\n data = deserialize(Buffer.from(u8Arr.slice(1)), TransferDataValues)\n\n // struct is defined at: https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/api/transfer.rs#L295\n // data = borsh.struct(this.transferDataValues, 'TransferNativeData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.TransferNative]\n }\n case TokenBridgeInstruction.TransferWrapped:\n data = deserialize(Buffer.from(u8Arr.slice(1)), TransferDataValues)\n\n // stuct is defined at: https://github.com/certusone/wormhole/blob/8818d4b8f0471095dd48fa6f5da9c315cbfc9b52/solana/modules/token_bridge/program/src/api/transfer.rs#L295\n // data = borsh.struct(this.transferDataValues, 'TransferWrappedData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.TransferWrapped]\n }\n case TokenBridgeInstruction.TransferNativeWithPayload:\n data = deserialize(Buffer.from(u8Arr.slice(1)), TransferNativeWithPayloadData)\n\n // data = borsh.struct(this.transferDataWithPayloadValues, 'TransferNativeWithPayloadData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.TransferNativeWithPayload]\n }\n case TokenBridgeInstruction.TransferWrappedWithPayload:\n data = deserialize(Buffer.from(u8Arr.slice(1)), TransferNativeWithPayloadData)\n\n // data = borsh.struct(this.transferDataWithPayloadValues, 'TransferWrappedWithPayloadData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.TransferWrappedWithPayload]\n }\n case TokenBridgeInstruction.Initialize:\n data = deserialize(Buffer.from(u8Arr.slice(1)), InitializeDataValues)\n\n // data = borsh.struct(this.initializeDataValues, 'InitializeData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.Initialize]\n }\n case TokenBridgeInstruction.AttestToken:\n data = deserialize(Buffer.from(u8Arr.slice(1)), AttestTokenValues)\n\n // data = borsh.struct(this.attestTokenValues, 'AttestTokenData').decode(Buffer.from(u8Arr.slice(1)))\n return {\n data,\n name: TokenBridgeInstruction[TokenBridgeInstruction.AttestToken]\n }\n case TokenBridgeInstruction.CompleteNative:\n case TokenBridgeInstruction.CompleteNativeWithPayload:\n case TokenBridgeInstruction.CompleteWrapped:\n case TokenBridgeInstruction.CompleteWrappedWithPayload:\n case TokenBridgeInstruction.CreateWrapped:\n case TokenBridgeInstruction.UpgradeContract:\n case TokenBridgeInstruction.RegisterChain:\n return {\n data: '',\n name: TokenBridgeInstruction[u8Arr[0]]\n }\n\n default:\n return null\n }\n }\n\n onInitialize(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('Initialize', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n\n onAttestToken(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('AttestToken', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n\n\n onTransferWrapped(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('TransferWrapped', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n\n onTransferNativeWithPayload(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('TransferNativeWithPayload', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n\n onTransferWrappedWithPaylod(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('TransferWrappedWithPaylod', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n\n onTransferNative(handler: (args: any, accounts: string[], ctx: SolanaContext) => void): TokenBridgeProcessor {\n this.onInstruction('TransferNative', (ins: Instruction, ctx, accounts: string[]) => {\n if (ins) {\n handler(ins.data, accounts, ctx)\n }\n })\n return this\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ListStateStorage } from '
|
|
1
|
+
import { ListStateStorage } from '@sentio/base';
|
|
2
2
|
import { AccountBindOptions } from './bind-options';
|
|
3
3
|
import { TransferEvent as ERC20TransferEvent } from '../builtin/internal/ERC20';
|
|
4
4
|
import { TransferEvent as ERC721TransferEvent } from '../builtin/internal/ERC721';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AccountProcessor = exports.AccountProcessorState = void 0;
|
|
4
|
-
const
|
|
4
|
+
const base_1 = require("@sentio/base");
|
|
5
5
|
const internal_1 = require("../builtin/internal");
|
|
6
6
|
const sdk_1 = require("@sentio/sdk");
|
|
7
7
|
const providers_1 = require("@ethersproject/providers");
|
|
8
8
|
const context_1 = require("./context");
|
|
9
|
-
class AccountProcessorState extends
|
|
9
|
+
class AccountProcessorState extends base_1.ListStateStorage {
|
|
10
10
|
static INSTANCE = new AccountProcessorState();
|
|
11
11
|
}
|
|
12
12
|
exports.AccountProcessorState = AccountProcessorState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-processor.js","sourceRoot":"","sources":["../../src/core/account-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { ListStateStorage } from '../state/state-storage'\nimport { ERC20__factory, ERC721__factory } from '../builtin/internal'\nimport { AddressType, DummyProvider, ProcessResult } from '@sentio/sdk'\nimport { AccountBindOptions } from './bind-options'\nimport { getNetwork } from '@ethersproject/providers'\nimport { TransferEvent as ERC20TransferEvent } from '../builtin/internal/ERC20'\nimport { TransferEvent as ERC721TransferEvent } from '../builtin/internal/ERC721'\nimport { AccountContext } from './context'\nimport { PromiseOrVoid } from '../promise-or-void'\nimport { Event } from '@ethersproject/contracts'\nimport { BytesLike } from '@ethersproject/bytes'\nimport { AddressOrTypeEventFilter, EventsHandler } from './base-processor'\n\nexport class AccountProcessorState extends ListStateStorage<AccountProcessor> {\n static INSTANCE = new AccountProcessorState()\n}\n\nconst ERC20_CONTRACT = ERC20__factory.connect('', DummyProvider)\nconst ERC721_CONTRACT = ERC721__factory.connect('', DummyProvider)\n\nexport class AccountProcessor {\n config: AccountBindOptions\n eventHandlers: EventsHandler[] = []\n\n static bind(config: AccountBindOptions): AccountProcessor {\n const processor = new AccountProcessor(config)\n AccountProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n protected constructor(config: AccountBindOptions) {\n this.config = config\n }\n\n public getChainId(): number {\n return getNetwork(this.config.network || 1).chainId\n }\n\n /**\n * Register custom handler function to process erc20 transfer event to this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n */\n onERC20TransferIn(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = []\n ) {\n return this.onERC20(handler, tokensAddresses, (address: string) =>\n ERC20_CONTRACT.filters.Transfer(null, this.config.address)\n )\n }\n\n /**\n * Register custom handler function to process erc20 transfer event from this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n */\n onERC20TransferOut(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = []\n ) {\n return this.onERC20(handler, tokensAddresses, (address: string) =>\n ERC20_CONTRACT.filters.Transfer(this.config.address)\n )\n }\n\n /**\n * Register custom handler function to process erc20 mint for this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n */\n onERC20Minted(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = []\n ) {\n return this.onERC20(handler, tokensAddresses, (address: string) =>\n ERC20_CONTRACT.filters.Transfer('0x0000000000000000000000000000000000000000', this.config.address)\n )\n }\n\n private onERC20(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = [],\n defaultFilter: (address: string) => AddressOrTypeEventFilter\n ) {\n return this.onERC(handler, tokensAddresses, defaultFilter, AddressType.ERC20)\n }\n\n /**\n * Register custom handler function to process ERC721 transfer event to this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n */\n onERC721TransferIn(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[]\n ) {\n return this.onERC721(handler, collections, (address: string) =>\n ERC721_CONTRACT.filters.Transfer(null, this.config.address)\n )\n }\n\n /**\n * Register custom handler function to process ERC721 transfer event from this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n */\n onERC721TransferOut(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[]\n ) {\n return this.onERC721(handler, collections, (address: string) =>\n ERC721_CONTRACT.filters.Transfer(this.config.address)\n )\n }\n\n /**\n * Register custom handler function to process ERC721 mint for this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n */\n onERC721Minted(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[] = []\n ) {\n return this.onERC721(handler, collections, (address: string) =>\n ERC721_CONTRACT.filters.Transfer('0x0000000000000000000000000000000000000000', this.config.address)\n )\n }\n\n private onERC721(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[],\n defaultFilter: (address: string) => AddressOrTypeEventFilter\n ) {\n return this.onERC(handler, collections, defaultFilter, AddressType.ERC721)\n }\n\n private onERC(\n handler: (event: any, ctx: AccountContext) => PromiseOrVoid,\n contractAddresses: string[],\n defaultFilter: (address: string) => AddressOrTypeEventFilter,\n addressType: AddressType\n ) {\n const filters = []\n for (const token of contractAddresses) {\n const filter = defaultFilter(this.config.address)\n filter.address = token\n filters.push(filter)\n }\n if (!filters.length) {\n const filter = defaultFilter(this.config.address)\n filter.address = undefined\n filter.addressType = addressType\n filters.push(filter)\n }\n return this.onEvent(handler, filters)\n }\n\n protected onEvent(\n handler: (event: Event, ctx: AccountContext) => PromiseOrVoid,\n filter: AddressOrTypeEventFilter | AddressOrTypeEventFilter[]\n ) {\n const chainId = this.getChainId()\n\n let _filters: AddressOrTypeEventFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n let hasVaildConfig = false\n for (const filter of _filters) {\n if (filter.address) {\n hasVaildConfig = true\n break\n }\n if (filter.topics && filter.topics.length) {\n hasVaildConfig = true\n break\n }\n }\n\n if (!hasVaildConfig) {\n throw Error('no valid config has been found for this account')\n }\n\n const config = this.config\n\n this.eventHandlers.push({\n filters: _filters,\n handler: async function (log) {\n const ctx = new AccountContext(chainId, config.address, undefined, log)\n // let event: Event = <Event>deepCopy(log);\n const event: Event = <Event>log\n const parsed = ERC20_CONTRACT.interface.parseLog(log)\n if (parsed) {\n event.args = parsed.args\n event.decode = (data: BytesLike, topics?: Array<any>) => {\n return ERC20_CONTRACT.interface.decodeEventLog(parsed.eventFragment, data, topics)\n }\n event.event = parsed.name\n event.eventSignature = parsed.signature\n\n // TODO fix this bug\n await handler(event, ctx)\n return ctx.getProcessResult()\n }\n return ProcessResult.fromPartial({})\n },\n })\n\n return this\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"account-processor.js","sourceRoot":"","sources":["../../src/core/account-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { ListStateStorage } from '@sentio/base'\nimport { ERC20__factory, ERC721__factory } from '../builtin/internal'\nimport { AddressType, DummyProvider, ProcessResult } from '@sentio/sdk'\nimport { AccountBindOptions } from './bind-options'\nimport { getNetwork } from '@ethersproject/providers'\nimport { TransferEvent as ERC20TransferEvent } from '../builtin/internal/ERC20'\nimport { TransferEvent as ERC721TransferEvent } from '../builtin/internal/ERC721'\nimport { AccountContext } from './context'\nimport { PromiseOrVoid } from '../promise-or-void'\nimport { Event } from '@ethersproject/contracts'\nimport { BytesLike } from '@ethersproject/bytes'\nimport { AddressOrTypeEventFilter, EventsHandler } from './base-processor'\n\nexport class AccountProcessorState extends ListStateStorage<AccountProcessor> {\n static INSTANCE = new AccountProcessorState()\n}\n\nconst ERC20_CONTRACT = ERC20__factory.connect('', DummyProvider)\nconst ERC721_CONTRACT = ERC721__factory.connect('', DummyProvider)\n\nexport class AccountProcessor {\n config: AccountBindOptions\n eventHandlers: EventsHandler[] = []\n\n static bind(config: AccountBindOptions): AccountProcessor {\n const processor = new AccountProcessor(config)\n AccountProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n protected constructor(config: AccountBindOptions) {\n this.config = config\n }\n\n public getChainId(): number {\n return getNetwork(this.config.network || 1).chainId\n }\n\n /**\n * Register custom handler function to process erc20 transfer event to this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n */\n onERC20TransferIn(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = []\n ) {\n return this.onERC20(handler, tokensAddresses, (address: string) =>\n ERC20_CONTRACT.filters.Transfer(null, this.config.address)\n )\n }\n\n /**\n * Register custom handler function to process erc20 transfer event from this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n */\n onERC20TransferOut(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = []\n ) {\n return this.onERC20(handler, tokensAddresses, (address: string) =>\n ERC20_CONTRACT.filters.Transfer(this.config.address)\n )\n }\n\n /**\n * Register custom handler function to process erc20 mint for this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n */\n onERC20Minted(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = []\n ) {\n return this.onERC20(handler, tokensAddresses, (address: string) =>\n ERC20_CONTRACT.filters.Transfer('0x0000000000000000000000000000000000000000', this.config.address)\n )\n }\n\n private onERC20(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = [],\n defaultFilter: (address: string) => AddressOrTypeEventFilter\n ) {\n return this.onERC(handler, tokensAddresses, defaultFilter, AddressType.ERC20)\n }\n\n /**\n * Register custom handler function to process ERC721 transfer event to this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n */\n onERC721TransferIn(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[]\n ) {\n return this.onERC721(handler, collections, (address: string) =>\n ERC721_CONTRACT.filters.Transfer(null, this.config.address)\n )\n }\n\n /**\n * Register custom handler function to process ERC721 transfer event from this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n */\n onERC721TransferOut(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[]\n ) {\n return this.onERC721(handler, collections, (address: string) =>\n ERC721_CONTRACT.filters.Transfer(this.config.address)\n )\n }\n\n /**\n * Register custom handler function to process ERC721 mint for this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n */\n onERC721Minted(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[] = []\n ) {\n return this.onERC721(handler, collections, (address: string) =>\n ERC721_CONTRACT.filters.Transfer('0x0000000000000000000000000000000000000000', this.config.address)\n )\n }\n\n private onERC721(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[],\n defaultFilter: (address: string) => AddressOrTypeEventFilter\n ) {\n return this.onERC(handler, collections, defaultFilter, AddressType.ERC721)\n }\n\n private onERC(\n handler: (event: any, ctx: AccountContext) => PromiseOrVoid,\n contractAddresses: string[],\n defaultFilter: (address: string) => AddressOrTypeEventFilter,\n addressType: AddressType\n ) {\n const filters = []\n for (const token of contractAddresses) {\n const filter = defaultFilter(this.config.address)\n filter.address = token\n filters.push(filter)\n }\n if (!filters.length) {\n const filter = defaultFilter(this.config.address)\n filter.address = undefined\n filter.addressType = addressType\n filters.push(filter)\n }\n return this.onEvent(handler, filters)\n }\n\n protected onEvent(\n handler: (event: Event, ctx: AccountContext) => PromiseOrVoid,\n filter: AddressOrTypeEventFilter | AddressOrTypeEventFilter[]\n ) {\n const chainId = this.getChainId()\n\n let _filters: AddressOrTypeEventFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n let hasVaildConfig = false\n for (const filter of _filters) {\n if (filter.address) {\n hasVaildConfig = true\n break\n }\n if (filter.topics && filter.topics.length) {\n hasVaildConfig = true\n break\n }\n }\n\n if (!hasVaildConfig) {\n throw Error('no valid config has been found for this account')\n }\n\n const config = this.config\n\n this.eventHandlers.push({\n filters: _filters,\n handler: async function (log) {\n const ctx = new AccountContext(chainId, config.address, undefined, log)\n // let event: Event = <Event>deepCopy(log);\n const event: Event = <Event>log\n const parsed = ERC20_CONTRACT.interface.parseLog(log)\n if (parsed) {\n event.args = parsed.args\n event.decode = (data: BytesLike, topics?: Array<any>) => {\n return ERC20_CONTRACT.interface.decodeEventLog(parsed.eventFragment, data, topics)\n }\n event.event = parsed.name\n event.eventSignature = parsed.signature\n\n // TODO fix this bug\n await handler(event, ctx)\n return ctx.getProcessResult()\n }\n return ProcessResult.fromPartial({})\n },\n })\n\n return this\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-context.js","sourceRoot":"","sources":["../../src/core/base-context.ts"],"names":[],"mappings":";;;AACA,qCAAiC;AAEjC,mCAA+B;AAE/B,MAAsB,WAAW;IAC/B,KAAK,CAAO;IACZ,MAAM,CAAQ;IAEd,GAAG,GAAkB;QACnB,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;KACT,CAAA;IAED;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;CAGF;AAtBD,kCAsBC","sourcesContent":["import { ProcessResult, RecordMetaData } from '
|
|
1
|
+
{"version":3,"file":"base-context.js","sourceRoot":"","sources":["../../src/core/base-context.ts"],"names":[],"mappings":";;;AACA,qCAAiC;AAEjC,mCAA+B;AAE/B,MAAsB,WAAW;IAC/B,KAAK,CAAO;IACZ,MAAM,CAAQ;IAEd,GAAG,GAAkB;QACnB,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;KACT,CAAA;IAED;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;CAGF;AAtBD,kCAsBC","sourcesContent":["import { ProcessResult, RecordMetaData } from '@sentio/protos'\nimport { Logger } from './logger'\nimport { Labels } from './metadata'\nimport { Meter } from './meter'\n\nexport abstract class BaseContext {\n meter: Meter\n logger: Logger\n\n res: ProcessResult = {\n counters: [],\n events: [],\n exports: [],\n gauges: [],\n logs: [],\n }\n\n protected constructor() {\n this.meter = new Meter(this)\n this.logger = new Logger(this)\n }\n\n getProcessResult(): ProcessResult {\n return this.res\n }\n\n abstract getMetaData(name: string, labels: Labels): RecordMetaData\n}\n"]}
|
|
@@ -4,10 +4,10 @@ import { BaseContract, EventFilter } from 'ethers';
|
|
|
4
4
|
import { Event } from '@ethersproject/contracts';
|
|
5
5
|
import { BaseProcessor } from './base-processor';
|
|
6
6
|
import { BindOptions } from './bind-options';
|
|
7
|
-
import { HandleInterval, TemplateInstance } from '
|
|
7
|
+
import { HandleInterval, TemplateInstance } from '@sentio/protos';
|
|
8
8
|
import { PromiseOrVoid } from '../promise-or-void';
|
|
9
9
|
import { Trace } from './trace';
|
|
10
|
-
import { ListStateStorage } from '
|
|
10
|
+
import { ListStateStorage } from '@sentio/base';
|
|
11
11
|
export declare class ProcessorTemplateProcessorState extends ListStateStorage<BaseProcessorTemplate<BaseContract, BoundContractView<BaseContract, any>>> {
|
|
12
12
|
static INSTANCE: ProcessorTemplateProcessorState;
|
|
13
13
|
}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.BaseProcessorTemplate = exports.TemplateInstanceState = exports.ProcessorTemplateProcessorState = void 0;
|
|
7
4
|
const bind_options_1 = require("./bind-options");
|
|
8
|
-
const long_1 = __importDefault(require("long"));
|
|
9
5
|
const providers_1 = require("@ethersproject/providers");
|
|
10
|
-
const
|
|
11
|
-
class ProcessorTemplateProcessorState extends
|
|
6
|
+
const base_1 = require("@sentio/base");
|
|
7
|
+
class ProcessorTemplateProcessorState extends base_1.ListStateStorage {
|
|
12
8
|
static INSTANCE = new ProcessorTemplateProcessorState();
|
|
13
9
|
}
|
|
14
10
|
exports.ProcessorTemplateProcessorState = ProcessorTemplateProcessorState;
|
|
15
|
-
class TemplateInstanceState extends
|
|
11
|
+
class TemplateInstanceState extends base_1.ListStateStorage {
|
|
16
12
|
static INSTANCE = new TemplateInstanceState();
|
|
17
13
|
}
|
|
18
14
|
exports.TemplateInstanceState = TemplateInstanceState;
|
|
@@ -47,24 +43,14 @@ class BaseProcessorTemplate {
|
|
|
47
43
|
chainId: options.network ? (0, providers_1.getNetwork)(options.network).chainId.toString() : '1',
|
|
48
44
|
abi: '',
|
|
49
45
|
},
|
|
50
|
-
startBlock:
|
|
51
|
-
endBlock:
|
|
46
|
+
startBlock: 0n,
|
|
47
|
+
endBlock: 0n,
|
|
52
48
|
};
|
|
53
49
|
if (options.startBlock) {
|
|
54
|
-
|
|
55
|
-
instance.startBlock = long_1.default.fromNumber(options.startBlock);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
instance.startBlock = options.startBlock;
|
|
59
|
-
}
|
|
50
|
+
instance.startBlock = BigInt(options.startBlock);
|
|
60
51
|
}
|
|
61
52
|
if (options.endBlock) {
|
|
62
|
-
|
|
63
|
-
instance.endBlock = long_1.default.fromNumber(options.endBlock);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
instance.endBlock = options.endBlock;
|
|
67
|
-
}
|
|
53
|
+
instance.endBlock = BigInt(options.endBlock);
|
|
68
54
|
}
|
|
69
55
|
TemplateInstanceState.INSTANCE.addValue(instance);
|
|
70
56
|
return processor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-processor-template.js","sourceRoot":"","sources":["../../src/core/base-processor-template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-processor-template.js","sourceRoot":"","sources":["../../src/core/base-processor-template.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoundContractView, ContractContext, ContractView } from './context'\nimport { Block } from '@ethersproject/abstract-provider'\nimport { BaseContract, EventFilter } from 'ethers'\nimport { Event } from '@ethersproject/contracts'\nimport { BaseProcessor } from './base-processor'\nimport { BindOptions, getOptionsSignature } from './bind-options'\nimport { HandleInterval, TemplateInstance } from '@sentio/protos'\nimport { getNetwork } from '@ethersproject/providers'\nimport { PromiseOrVoid } from '../promise-or-void'\nimport { Trace } from './trace'\nimport { ListStateStorage } from '@sentio/base'\n\nexport class ProcessorTemplateProcessorState extends ListStateStorage<\n BaseProcessorTemplate<BaseContract, BoundContractView<BaseContract, any>>\n> {\n static INSTANCE = new ProcessorTemplateProcessorState()\n}\n\nexport class TemplateInstanceState extends ListStateStorage<TemplateInstance> {\n static INSTANCE = new TemplateInstanceState()\n}\n\nexport abstract class BaseProcessorTemplate<\n TContract extends BaseContract,\n TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>\n> {\n id: number\n binds = new Set<string>()\n blockHandlers: {\n handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n blockInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n }[] = []\n traceHandlers: {\n signature: string\n handler: (trace: Trace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n }[] = []\n eventHandlers: {\n handler: (event: Event, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n filter: EventFilter | EventFilter[]\n }[] = []\n\n constructor() {\n this.id = ProcessorTemplateProcessorState.INSTANCE.getValues().length\n ProcessorTemplateProcessorState.INSTANCE.addValue(this)\n }\n\n public bind(options: BindOptions) {\n const sig = getOptionsSignature(options)\n if (this.binds.has(sig)) {\n return\n }\n this.binds.add(sig)\n\n const processor = this.bindInternal(options)\n\n for (const eh of this.eventHandlers) {\n processor.onEvent(eh.handler, eh.filter)\n }\n for (const bh of this.blockHandlers) {\n processor.onInterval(bh.handler, bh.timeIntervalInMinutes, bh.blockInterval)\n }\n\n const instance: TemplateInstance = {\n templateId: this.id,\n contract: {\n address: options.address,\n name: options.name || '',\n chainId: options.network ? getNetwork(options.network).chainId.toString() : '1',\n abi: '',\n },\n startBlock: 0n,\n endBlock: 0n,\n }\n if (options.startBlock) {\n instance.startBlock = BigInt(options.startBlock)\n }\n if (options.endBlock) {\n instance.endBlock = BigInt(options.endBlock)\n }\n TemplateInstanceState.INSTANCE.addValue(instance)\n return processor\n }\n\n public onEvent(\n handler: (event: Event, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n filter: EventFilter | EventFilter[]\n ) {\n this.eventHandlers.push({\n handler: handler,\n filter: filter,\n })\n return this\n }\n\n public onBlock(handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid) {\n return this.onBlockInterval(handler)\n }\n\n public onBlockInterval(\n handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n blockInterval = 1000,\n backfillBlockInterval = 4000\n ) {\n return this.onInterval(handler, undefined, {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n })\n }\n\n public onTimeInterval(\n handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillBlockInterval = 240\n ) {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillBlockInterval },\n undefined\n )\n }\n\n public onInterval(\n handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined\n ) {\n this.blockHandlers.push({ handler, timeIntervalInMinutes: timeInterval, blockInterval: blockInterval })\n return this\n }\n\n public onTrace(\n signature: string,\n handler: (trace: Trace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n ) {\n this.traceHandlers.push({ signature, handler })\n return this\n }\n\n protected abstract bindInternal(options: BindOptions): BaseProcessor<TContract, TBoundContractView>\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Block, Log } from '@ethersproject/providers';
|
|
2
2
|
import { BaseContract, Event, EventFilter } from '@ethersproject/contracts';
|
|
3
3
|
import { BoundContractView, ContractContext, ContractView } from './context';
|
|
4
|
-
import { AddressType, HandleInterval, ProcessResult } from '
|
|
4
|
+
import { AddressType, HandleInterval, ProcessResult } from '@sentio/protos';
|
|
5
5
|
import { BindInternalOptions, BindOptions } from './bind-options';
|
|
6
6
|
import { PromiseOrVoid } from '../promise-or-void';
|
|
7
7
|
import { Trace } from './trace';
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.BaseProcessor = exports.BlockHandlder = exports.TraceHandler = exports.EventsHandler = void 0;
|
|
7
4
|
const providers_1 = require("@ethersproject/providers");
|
|
8
|
-
const long_1 = __importDefault(require("long"));
|
|
9
5
|
const context_1 = require("./context");
|
|
10
|
-
const
|
|
6
|
+
const protos_1 = require("@sentio/protos");
|
|
11
7
|
class EventsHandler {
|
|
12
8
|
filters;
|
|
13
9
|
handler;
|
|
@@ -34,23 +30,13 @@ class BaseProcessor {
|
|
|
34
30
|
address: config.address,
|
|
35
31
|
name: config.name || '',
|
|
36
32
|
network: config.network ? config.network : 1,
|
|
37
|
-
startBlock:
|
|
33
|
+
startBlock: 0n,
|
|
38
34
|
};
|
|
39
35
|
if (config.startBlock) {
|
|
40
|
-
|
|
41
|
-
this.config.startBlock = long_1.default.fromNumber(config.startBlock);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
this.config.startBlock = config.startBlock;
|
|
45
|
-
}
|
|
36
|
+
this.config.startBlock = BigInt(config.startBlock);
|
|
46
37
|
}
|
|
47
38
|
if (config.endBlock) {
|
|
48
|
-
|
|
49
|
-
this.config.endBlock = long_1.default.fromNumber(config.endBlock);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
this.config.endBlock = config.endBlock;
|
|
53
|
-
}
|
|
39
|
+
this.config.endBlock = BigInt(config.endBlock);
|
|
54
40
|
}
|
|
55
41
|
}
|
|
56
42
|
getChainId() {
|
|
@@ -85,7 +71,7 @@ class BaseProcessor {
|
|
|
85
71
|
await handler(event, ctx);
|
|
86
72
|
return ctx.getProcessResult();
|
|
87
73
|
}
|
|
88
|
-
return
|
|
74
|
+
return protos_1.ProcessResult.fromPartial({});
|
|
89
75
|
},
|
|
90
76
|
});
|
|
91
77
|
return this;
|
|
@@ -137,7 +123,7 @@ class BaseProcessor {
|
|
|
137
123
|
const contractInterface = contractView.rawContract.interface;
|
|
138
124
|
const fragment = contractInterface.getFunction(signature);
|
|
139
125
|
if (!trace.action.input) {
|
|
140
|
-
return
|
|
126
|
+
return protos_1.ProcessResult.fromPartial({});
|
|
141
127
|
}
|
|
142
128
|
const traceData = '0x' + trace.action.input.slice(10);
|
|
143
129
|
trace.args = contractInterface._abiCoder.decode(fragment.inputs, traceData);
|