@sentio/sdk 2.0.0-rc.14 → 2.0.0-rc.15
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 +5 -0
- package/lib/aptos/api.js +21 -0
- package/lib/aptos/api.js.map +1 -0
- package/lib/aptos/aptos-plugin.d.ts +14 -0
- package/lib/aptos/aptos-plugin.js +146 -0
- package/lib/aptos/aptos-plugin.js.map +1 -0
- package/lib/aptos/aptos-processor.d.ts +72 -0
- package/lib/aptos/aptos-processor.js +201 -0
- package/lib/aptos/aptos-processor.js.map +1 -0
- package/lib/aptos/builtin/0x1.d.ts +2140 -0
- package/lib/aptos/builtin/0x1.js +2727 -0
- package/lib/aptos/builtin/0x1.js.map +1 -0
- package/lib/aptos/builtin/0x3.d.ts +573 -0
- package/lib/aptos/builtin/0x3.js +496 -0
- package/lib/aptos/builtin/0x3.js.map +1 -0
- package/lib/aptos/builtin/index.d.ts +2 -0
- package/lib/aptos/builtin/index.js +6 -0
- package/lib/aptos/builtin/index.js.map +1 -0
- package/lib/aptos/codegen/codegen.d.ts +23 -0
- package/lib/aptos/codegen/codegen.js +388 -0
- package/lib/aptos/codegen/codegen.js.map +1 -0
- package/lib/aptos/codegen/index.d.ts +1 -0
- package/lib/aptos/codegen/index.js +2 -0
- package/lib/aptos/codegen/index.js.map +1 -0
- package/lib/aptos/codegen/typegen.d.ts +18 -0
- package/lib/aptos/codegen/typegen.js +145 -0
- package/lib/aptos/codegen/typegen.js.map +1 -0
- package/lib/aptos/codegen/typegen.test.d.ts +1 -0
- package/lib/aptos/codegen/typegen.test.js.map +1 -0
- package/lib/aptos/context.d.ts +21 -0
- package/lib/aptos/context.js +59 -0
- package/lib/aptos/context.js.map +1 -0
- package/lib/aptos/index.d.ts +9 -0
- package/lib/aptos/index.js +8 -0
- package/lib/aptos/index.js.map +1 -0
- package/lib/aptos/models.d.ts +37 -0
- package/lib/aptos/models.js +2 -0
- package/lib/aptos/models.js.map +1 -0
- package/lib/aptos/move-coder.d.ts +22 -0
- package/lib/aptos/move-coder.js +164 -0
- package/lib/aptos/move-coder.js.map +1 -0
- package/lib/aptos/move-types.d.ts +10 -0
- package/lib/aptos/move-types.js +2 -0
- package/lib/aptos/move-types.js.map +1 -0
- package/lib/aptos/network.d.ts +11 -0
- package/lib/aptos/network.js +27 -0
- package/lib/aptos/network.js.map +1 -0
- package/lib/aptos/run-codegen.d.ts +1 -0
- package/lib/aptos/run-codegen.js +12 -0
- package/lib/aptos/run-codegen.js.map +1 -0
- package/lib/aptos/tests/aptos.test.d.ts +1 -0
- package/lib/aptos/tests/aptos.test.js.map +1 -0
- package/lib/aptos/tests/souffl3.d.ts +1 -0
- package/lib/aptos/tests/souffl3.js +44 -0
- package/lib/aptos/tests/souffl3.js.map +1 -0
- package/lib/aptos/tests/types/index.d.ts +3 -0
- package/lib/aptos/tests/types/index.js +7 -0
- package/lib/aptos/tests/types/index.js.map +1 -0
- package/lib/aptos/tests/types/reserved.d.ts +445 -0
- package/lib/aptos/tests/types/reserved.js +301 -0
- package/lib/aptos/tests/types/reserved.js.map +1 -0
- package/lib/aptos/tests/types/soffl3.d.ts +1065 -0
- package/lib/aptos/tests/types/soffl3.js +548 -0
- package/lib/aptos/tests/types/soffl3.js.map +1 -0
- package/lib/aptos/tests/types/souffle.d.ts +440 -0
- package/lib/aptos/tests/types/souffle.js +295 -0
- package/lib/aptos/tests/types/souffle.js.map +1 -0
- package/lib/aptos/types.d.ts +9 -0
- package/lib/aptos/types.js +130 -0
- package/lib/aptos/types.js.map +1 -0
- package/lib/aptos/types.test.d.ts +1 -0
- package/lib/aptos/types.test.js.map +1 -0
- package/lib/aptos/utils.d.ts +7 -0
- package/lib/aptos/utils.js +20 -0
- package/lib/aptos/utils.js.map +1 -0
- package/lib/{utils/chain.d.ts → chain.d.ts} +0 -0
- package/lib/{utils/chain.js → chain.js} +0 -0
- package/lib/chain.js.map +1 -0
- package/lib/core/context.js +1 -1
- package/lib/core/context.js.map +1 -1
- package/lib/core/sui-plugin.js +1 -1
- package/lib/core/sui-plugin.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/solana/builtin/index.d.ts +1 -0
- package/lib/solana/builtin/index.js +2 -0
- package/lib/solana/builtin/index.js.map +1 -0
- package/lib/solana/builtin/spl-token-processor.d.ts +39 -0
- package/lib/solana/builtin/spl-token-processor.js +254 -0
- package/lib/solana/builtin/spl-token-processor.js.map +1 -0
- package/lib/solana/builtin/types.d.ts +427 -0
- package/lib/solana/builtin/types.js +200 -0
- package/lib/solana/builtin/types.js.map +1 -0
- package/lib/solana/codegen/codegen.d.ts +1 -0
- package/lib/solana/codegen/codegen.js +122 -0
- package/lib/solana/codegen/codegen.js.map +1 -0
- package/lib/solana/codegen/index.d.ts +1 -0
- package/lib/solana/codegen/index.js +2 -0
- package/lib/solana/codegen/index.js.map +1 -0
- package/lib/solana/index.d.ts +4 -0
- package/lib/solana/index.js +5 -0
- package/lib/solana/index.js.map +1 -0
- package/lib/solana/run-codegen.d.ts +2 -0
- package/lib/solana/run-codegen.js +12 -0
- package/lib/solana/run-codegen.js.map +1 -0
- package/lib/solana/solana-context.d.ts +9 -0
- package/lib/solana/solana-context.js +28 -0
- package/lib/solana/solana-context.js.map +1 -0
- package/lib/solana/solana-options.d.ts +10 -0
- package/lib/solana/solana-options.js +10 -0
- package/lib/solana/solana-options.js.map +1 -0
- package/lib/solana/solana-plugin.d.ts +9 -0
- package/lib/solana/solana-plugin.js +87 -0
- package/lib/solana/solana-plugin.js.map +1 -0
- package/lib/solana/solana-processor.d.ts +43 -0
- package/lib/solana/solana-processor.js +72 -0
- package/lib/solana/solana-processor.js.map +1 -0
- package/lib/solana/tests/solana.test.d.ts +1 -0
- package/lib/solana/tests/solana.test.js.map +1 -0
- package/lib/solana/tests/types/basic_1.d.ts +26 -0
- package/lib/solana/tests/types/basic_1.js +63 -0
- package/lib/solana/tests/types/basic_1.js.map +1 -0
- package/lib/solana/tests/types/basic_1_processor.d.ts +21 -0
- package/lib/solana/tests/types/basic_1_processor.js +35 -0
- package/lib/solana/tests/types/basic_1_processor.js.map +1 -0
- package/lib/solana/tests/types/token_bridge.d.ts +29 -0
- package/lib/solana/tests/types/token_bridge.js +938 -0
- package/lib/solana/tests/types/token_bridge.js.map +1 -0
- package/lib/solana/tests/types/token_bridge_processor.d.ts +212 -0
- package/lib/solana/tests/types/token_bridge_processor.js +134 -0
- package/lib/solana/tests/types/token_bridge_processor.js.map +1 -0
- package/lib/solana/tests/wormhole-token-bridge.d.ts +15 -0
- package/lib/solana/tests/wormhole-token-bridge.js +79 -0
- package/lib/solana/tests/wormhole-token-bridge.js.map +1 -0
- package/lib/testing/test-processor-server.js +1 -1
- package/lib/testing/test-processor-server.js.map +1 -1
- package/lib/testing/test-provider.js +1 -1
- package/lib/testing/test-provider.js.map +1 -1
- package/lib/utils/index.d.ts +0 -1
- package/lib/utils/index.js +0 -1
- package/lib/utils/index.js.map +1 -1
- package/package.json +33 -11
- package/src/aptos/abis/0x1.json +9205 -0
- package/src/aptos/abis/0x3.json +1515 -0
- package/src/aptos/api.ts +23 -0
- package/src/aptos/aptos-plugin.ts +183 -0
- package/src/aptos/aptos-processor.ts +331 -0
- package/src/aptos/builtin/0x1.ts +4911 -0
- package/src/aptos/builtin/0x3.ts +1092 -0
- package/src/aptos/builtin/index.ts +5 -0
- package/src/aptos/codegen/codegen.ts +470 -0
- package/src/aptos/codegen/index.ts +1 -0
- package/src/aptos/codegen/tsconfig.json +8 -0
- package/src/aptos/codegen/typegen.ts +165 -0
- package/src/aptos/context.ts +72 -0
- package/src/aptos/index.ts +10 -0
- package/src/aptos/models.ts +47 -0
- package/src/aptos/move-coder.ts +201 -0
- package/src/aptos/move-types.ts +11 -0
- package/src/aptos/network.ts +29 -0
- package/src/aptos/run-codegen.ts +13 -0
- package/src/aptos/tests/abis/reserved.json +402 -0
- package/src/aptos/tests/abis/soffl3.json +1411 -0
- package/src/aptos/tests/abis/souffle.json +389 -0
- package/src/aptos/tests/souffl3.ts +57 -0
- package/src/aptos/tests/types/index.ts +6 -0
- package/src/aptos/tests/types/reserved.ts +881 -0
- package/src/aptos/tests/types/soffl3.ts +1820 -0
- package/src/aptos/tests/types/souffle.ts +880 -0
- package/src/aptos/types.ts +149 -0
- package/src/aptos/utils.ts +26 -0
- package/src/{utils/chain.ts → chain.ts} +0 -0
- package/src/core/context.ts +1 -1
- package/src/core/sui-plugin.ts +1 -1
- package/src/index.ts +1 -1
- package/src/solana/builtin/index.ts +1 -0
- package/src/solana/builtin/spl-token-processor.ts +298 -0
- package/src/solana/builtin/types.ts +279 -0
- package/src/solana/codegen/codegen.ts +140 -0
- package/src/solana/codegen/index.ts +1 -0
- package/src/solana/codegen/tsconfig.json +8 -0
- package/src/solana/index.ts +4 -0
- package/src/solana/run-codegen.ts +13 -0
- package/src/solana/solana-context.ts +30 -0
- package/src/solana/solana-options.ts +11 -0
- package/src/solana/solana-plugin.ts +103 -0
- package/src/solana/solana-processor.ts +102 -0
- package/src/solana/tests/abis/basic_1.json +62 -0
- package/src/solana/tests/abis/token_bridge.json +937 -0
- package/src/solana/tests/types/basic_1.ts +62 -0
- package/src/solana/tests/types/basic_1_processor.ts +42 -0
- package/src/solana/tests/types/token_bridge.ts +937 -0
- package/src/solana/tests/types/token_bridge_processor.ts +150 -0
- package/src/solana/tests/wormhole-token-bridge.ts +96 -0
- package/src/testing/test-processor-server.ts +1 -1
- package/src/testing/test-provider.ts +1 -1
- package/src/utils/index.ts +0 -1
- package/lib/utils/chain.js.map +0 -1
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-redeclare */
|
|
2
|
+
// copy from https://github.com/solana-labs/solana/blob/master/explorer/src/components/instruction/token/types.ts
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
enums,
|
|
6
|
+
type,
|
|
7
|
+
Infer,
|
|
8
|
+
number,
|
|
9
|
+
string,
|
|
10
|
+
optional,
|
|
11
|
+
array,
|
|
12
|
+
nullable,
|
|
13
|
+
union,
|
|
14
|
+
coerce,
|
|
15
|
+
instance,
|
|
16
|
+
} from "superstruct";
|
|
17
|
+
|
|
18
|
+
// Replace with string
|
|
19
|
+
export const PublicKeyFromString = coerce(
|
|
20
|
+
instance(String),
|
|
21
|
+
string(),
|
|
22
|
+
(value) => (value)
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
export type TokenAmountUi = Infer<typeof TokenAmountUi>;
|
|
26
|
+
export type MintTo = Infer<typeof MintTo>;
|
|
27
|
+
export type Burn = Infer<typeof Burn>;
|
|
28
|
+
export type InitializeMint = Infer<typeof InitializeMint>;
|
|
29
|
+
export type InitializeAccount = Infer<typeof InitializeAccount>;
|
|
30
|
+
export type InitializeAccount2 = Infer<typeof InitializeAccount2>;
|
|
31
|
+
export type InitializeAccount3 = Infer<typeof InitializeAccount3>;
|
|
32
|
+
export type InitializeMultisig = Infer<typeof InitializeMultisig>;
|
|
33
|
+
|
|
34
|
+
export const TokenAmountUi = type({
|
|
35
|
+
amount: string(),
|
|
36
|
+
decimals: number(),
|
|
37
|
+
uiAmountString: string(),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const InitializeMint = type({
|
|
41
|
+
mint: PublicKeyFromString,
|
|
42
|
+
decimals: number(),
|
|
43
|
+
mintAuthority: PublicKeyFromString,
|
|
44
|
+
rentSysvar: PublicKeyFromString,
|
|
45
|
+
freezeAuthority: optional(PublicKeyFromString),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const InitializeAccount = type({
|
|
49
|
+
account: PublicKeyFromString,
|
|
50
|
+
mint: PublicKeyFromString,
|
|
51
|
+
owner: PublicKeyFromString,
|
|
52
|
+
rentSysvar: PublicKeyFromString,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const InitializeAccount2 = type({
|
|
56
|
+
account: PublicKeyFromString,
|
|
57
|
+
mint: PublicKeyFromString,
|
|
58
|
+
rentSysvar: PublicKeyFromString,
|
|
59
|
+
owner: PublicKeyFromString,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const InitializeAccount3 = type({
|
|
63
|
+
account: PublicKeyFromString,
|
|
64
|
+
mint: PublicKeyFromString,
|
|
65
|
+
owner: PublicKeyFromString,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const InitializeMultisig = type({
|
|
69
|
+
multisig: PublicKeyFromString,
|
|
70
|
+
rentSysvar: PublicKeyFromString,
|
|
71
|
+
signers: array(PublicKeyFromString),
|
|
72
|
+
m: number(),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
export type Transfer = Infer<typeof Transfer>;
|
|
76
|
+
export const Transfer = type({
|
|
77
|
+
source: PublicKeyFromString,
|
|
78
|
+
destination: PublicKeyFromString,
|
|
79
|
+
amount: union([string(), number()]),
|
|
80
|
+
authority: optional(PublicKeyFromString),
|
|
81
|
+
multisigAuthority: optional(PublicKeyFromString),
|
|
82
|
+
signers: optional(array(PublicKeyFromString)),
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export type Approve = Infer<typeof Approve>;
|
|
86
|
+
const Approve = type({
|
|
87
|
+
source: PublicKeyFromString,
|
|
88
|
+
delegate: PublicKeyFromString,
|
|
89
|
+
amount: union([string(), number()]),
|
|
90
|
+
owner: optional(PublicKeyFromString),
|
|
91
|
+
multisigOwner: optional(PublicKeyFromString),
|
|
92
|
+
signers: optional(array(PublicKeyFromString)),
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
export type Revoke = Infer<typeof Revoke>;
|
|
96
|
+
const Revoke = type({
|
|
97
|
+
source: PublicKeyFromString,
|
|
98
|
+
owner: optional(PublicKeyFromString),
|
|
99
|
+
multisigOwner: optional(PublicKeyFromString),
|
|
100
|
+
signers: optional(array(PublicKeyFromString)),
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
const AuthorityType = enums([
|
|
104
|
+
"mintTokens",
|
|
105
|
+
"freezeAccount",
|
|
106
|
+
"accountOwner",
|
|
107
|
+
"closeAccount",
|
|
108
|
+
]);
|
|
109
|
+
|
|
110
|
+
export type SetAuthority = Infer<typeof SetAuthority>;
|
|
111
|
+
const SetAuthority = type({
|
|
112
|
+
mint: optional(PublicKeyFromString),
|
|
113
|
+
account: optional(PublicKeyFromString),
|
|
114
|
+
authorityType: AuthorityType,
|
|
115
|
+
newAuthority: nullable(PublicKeyFromString),
|
|
116
|
+
authority: optional(PublicKeyFromString),
|
|
117
|
+
multisigAuthority: optional(PublicKeyFromString),
|
|
118
|
+
signers: optional(array(PublicKeyFromString)),
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const MintTo = type({
|
|
122
|
+
mint: PublicKeyFromString,
|
|
123
|
+
account: PublicKeyFromString,
|
|
124
|
+
amount: union([string(), number()]),
|
|
125
|
+
mintAuthority: optional(PublicKeyFromString),
|
|
126
|
+
multisigMintAuthority: optional(PublicKeyFromString),
|
|
127
|
+
signers: optional(array(PublicKeyFromString)),
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
const Burn = type({
|
|
131
|
+
account: PublicKeyFromString,
|
|
132
|
+
mint: PublicKeyFromString,
|
|
133
|
+
amount: union([string(), number()]),
|
|
134
|
+
authority: optional(PublicKeyFromString),
|
|
135
|
+
multisigAuthority: optional(PublicKeyFromString),
|
|
136
|
+
signers: optional(array(PublicKeyFromString)),
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
const CloseAccount = type({
|
|
140
|
+
account: PublicKeyFromString,
|
|
141
|
+
destination: PublicKeyFromString,
|
|
142
|
+
owner: optional(PublicKeyFromString),
|
|
143
|
+
multisigOwner: optional(PublicKeyFromString),
|
|
144
|
+
signers: optional(array(PublicKeyFromString)),
|
|
145
|
+
});
|
|
146
|
+
export type CloseAccount = Infer<typeof CloseAccount>;
|
|
147
|
+
|
|
148
|
+
export type FreezeAccount = Infer<typeof FreezeAccount>;
|
|
149
|
+
const FreezeAccount = type({
|
|
150
|
+
account: PublicKeyFromString,
|
|
151
|
+
mint: PublicKeyFromString,
|
|
152
|
+
freezeAuthority: optional(PublicKeyFromString),
|
|
153
|
+
multisigFreezeAuthority: optional(PublicKeyFromString),
|
|
154
|
+
signers: optional(array(PublicKeyFromString)),
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
export type ThawAccount = Infer<typeof ThawAccount>;
|
|
158
|
+
const ThawAccount = type({
|
|
159
|
+
account: PublicKeyFromString,
|
|
160
|
+
mint: PublicKeyFromString,
|
|
161
|
+
freezeAuthority: optional(PublicKeyFromString),
|
|
162
|
+
multisigFreezeAuthority: optional(PublicKeyFromString),
|
|
163
|
+
signers: optional(array(PublicKeyFromString)),
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
export type TransferChecked = Infer<typeof TransferChecked>;
|
|
167
|
+
export const TransferChecked = type({
|
|
168
|
+
source: PublicKeyFromString,
|
|
169
|
+
mint: PublicKeyFromString,
|
|
170
|
+
destination: PublicKeyFromString,
|
|
171
|
+
authority: optional(PublicKeyFromString),
|
|
172
|
+
multisigAuthority: optional(PublicKeyFromString),
|
|
173
|
+
signers: optional(array(PublicKeyFromString)),
|
|
174
|
+
tokenAmount: TokenAmountUi,
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
export type ApproveChecked = Infer<typeof ApproveChecked>;
|
|
178
|
+
const ApproveChecked = type({
|
|
179
|
+
source: PublicKeyFromString,
|
|
180
|
+
mint: PublicKeyFromString,
|
|
181
|
+
delegate: PublicKeyFromString,
|
|
182
|
+
owner: optional(PublicKeyFromString),
|
|
183
|
+
multisigOwner: optional(PublicKeyFromString),
|
|
184
|
+
signers: optional(array(PublicKeyFromString)),
|
|
185
|
+
tokenAmount: TokenAmountUi,
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
export type MintToChecked = Infer<typeof MintToChecked>;
|
|
189
|
+
const MintToChecked = type({
|
|
190
|
+
account: PublicKeyFromString,
|
|
191
|
+
mint: PublicKeyFromString,
|
|
192
|
+
mintAuthority: optional(PublicKeyFromString),
|
|
193
|
+
multisigMintAuthority: optional(PublicKeyFromString),
|
|
194
|
+
signers: optional(array(PublicKeyFromString)),
|
|
195
|
+
tokenAmount: TokenAmountUi,
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
export type BurnChecked = Infer<typeof BurnChecked>;
|
|
199
|
+
const BurnChecked = type({
|
|
200
|
+
account: PublicKeyFromString,
|
|
201
|
+
mint: PublicKeyFromString,
|
|
202
|
+
authority: optional(PublicKeyFromString),
|
|
203
|
+
multisigAuthority: optional(PublicKeyFromString),
|
|
204
|
+
signers: optional(array(PublicKeyFromString)),
|
|
205
|
+
tokenAmount: TokenAmountUi,
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
export type SyncNative = Infer<typeof BurnChecked>;
|
|
209
|
+
const SyncNative = type({
|
|
210
|
+
account: PublicKeyFromString,
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
export type GetAccountDataSize = Infer<typeof GetAccountDataSize>;
|
|
214
|
+
const GetAccountDataSize = type({
|
|
215
|
+
mint: PublicKeyFromString,
|
|
216
|
+
extensionTypes: optional(array(string())),
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
export type InitializeImmutableOwner = Infer<typeof InitializeImmutableOwner>;
|
|
220
|
+
const InitializeImmutableOwner = type({
|
|
221
|
+
account: PublicKeyFromString,
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
export type AmountToUiAmount = Infer<typeof AmountToUiAmount>;
|
|
225
|
+
const AmountToUiAmount = type({
|
|
226
|
+
mint: PublicKeyFromString,
|
|
227
|
+
amount: union([string(), number()]),
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
export type UiAmountToAmount = Infer<typeof UiAmountToAmount>;
|
|
231
|
+
const UiAmountToAmount = type({
|
|
232
|
+
mint: PublicKeyFromString,
|
|
233
|
+
uiAmount: string(),
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
export type InitializeMintCloseAuthority = Infer<typeof InitializeMintCloseAuthority>;
|
|
237
|
+
const InitializeMintCloseAuthority = type({
|
|
238
|
+
mint: PublicKeyFromString,
|
|
239
|
+
newAuthority: PublicKeyFromString,
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
export type TransferFeeExtension = Infer<typeof TransferFeeExtension>;
|
|
243
|
+
const TransferFeeExtension = type({
|
|
244
|
+
mint: PublicKeyFromString,
|
|
245
|
+
transferFeeConfigAuthority: PublicKeyFromString,
|
|
246
|
+
withdrawWitheldAuthority: PublicKeyFromString,
|
|
247
|
+
transferFeeBasisPoints: number(),
|
|
248
|
+
maximumFee: number(),
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
export type DefaultAccountStateExtension = Infer<typeof DefaultAccountStateExtension>;
|
|
252
|
+
const DefaultAccountStateExtension = type({
|
|
253
|
+
mint: PublicKeyFromString,
|
|
254
|
+
accountState: string(),
|
|
255
|
+
freezeAuthority: optional(PublicKeyFromString),
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
export type Reallocate = Infer<typeof Reallocate>;
|
|
259
|
+
const Reallocate = type({
|
|
260
|
+
account: PublicKeyFromString,
|
|
261
|
+
payer: PublicKeyFromString,
|
|
262
|
+
systemProgram: PublicKeyFromString,
|
|
263
|
+
extensionTypes: array(string()),
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
export type MemoTransferExtension = Infer<typeof MemoTransferExtension>;
|
|
267
|
+
const MemoTransferExtension = type({
|
|
268
|
+
account: PublicKeyFromString,
|
|
269
|
+
owner: optional(PublicKeyFromString),
|
|
270
|
+
multisigOwner: optional(PublicKeyFromString),
|
|
271
|
+
signers: optional(array(PublicKeyFromString)),
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
export type CreateNativeMint = Infer<typeof CreateNativeMint>;
|
|
275
|
+
const CreateNativeMint = type({
|
|
276
|
+
payer: PublicKeyFromString,
|
|
277
|
+
nativeMint: PublicKeyFromString,
|
|
278
|
+
systemProgram: PublicKeyFromString,
|
|
279
|
+
});
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import path from 'path'
|
|
2
|
+
import fs from 'fs'
|
|
3
|
+
import chalk from 'chalk'
|
|
4
|
+
import { Idl } from '@project-serum/anchor'
|
|
5
|
+
import { IdlAccountItem, IdlField, IdlInstruction, IdlType } from '@project-serum/anchor/dist/cjs/idl.js'
|
|
6
|
+
|
|
7
|
+
export function codeGenSolanaProcessor(abisDir: string, targetPath = path.join('src', 'types', 'solana')) {
|
|
8
|
+
if (!fs.existsSync(abisDir)) {
|
|
9
|
+
return
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const abisFiles = fs.readdirSync(abisDir)
|
|
13
|
+
|
|
14
|
+
if (abisFiles.length > 0) {
|
|
15
|
+
console.log(chalk.green('Generated Types for Solana'))
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
for (const file of abisFiles) {
|
|
19
|
+
if (path.extname(file) === '.json') {
|
|
20
|
+
if (!fs.existsSync(targetPath)) {
|
|
21
|
+
fs.mkdirSync(targetPath, { recursive: true })
|
|
22
|
+
}
|
|
23
|
+
const idlContent = fs.readFileSync(path.join(abisDir, file), 'utf-8')
|
|
24
|
+
const idlObj = JSON.parse(idlContent)
|
|
25
|
+
const idlName = idlObj.name
|
|
26
|
+
const idlFile = path.join(targetPath, idlName + '.ts')
|
|
27
|
+
fs.writeFileSync(idlFile, `export const ${idlName}_idl = ${idlContent}`)
|
|
28
|
+
fs.writeFileSync(path.join(targetPath, `${idlName}_processor.ts`), codeGenSolanaIdlProcessor(idlObj))
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function codeGenSolanaIdlProcessor(idlObj: Idl): string {
|
|
34
|
+
const idlName = idlObj.name
|
|
35
|
+
const idlNamePascalCase = toPascalCase(idlName)
|
|
36
|
+
const instructions: any[] = idlObj.instructions
|
|
37
|
+
return `import { BorshInstructionCoder, Instruction, Idl } from '@project-serum/anchor'
|
|
38
|
+
import { SolanaBaseProcessor, SolanaContext, SolanaBindOptions } from "@sentio/sdk/solana"
|
|
39
|
+
import { ${idlName}_idl } from "./${idlName}.js"
|
|
40
|
+
import { PublicKey } from '@solana/web3.js'
|
|
41
|
+
|
|
42
|
+
export class ${idlNamePascalCase}Processor extends SolanaBaseProcessor {
|
|
43
|
+
static DEFAULT_OPTIONS = {
|
|
44
|
+
name: '${idlNamePascalCase}',
|
|
45
|
+
instructionCoder: new BorshInstructionCoder(${idlName}_idl as Idl)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
static bind(options: SolanaBindOptions): ${idlNamePascalCase}Processor {
|
|
49
|
+
return new ${idlNamePascalCase}Processor( { ...${idlNamePascalCase}Processor.DEFAULT_OPTIONS, ...options })
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
${instructions.map((ins) => codeGenSolanaInstruction(idlNamePascalCase, ins)).join('')}
|
|
53
|
+
}
|
|
54
|
+
`
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function codeGenSolanaInstruction(idlName: string, ins: IdlInstruction): string {
|
|
58
|
+
const instructionName = ins.name
|
|
59
|
+
|
|
60
|
+
const argsType = codeGenInstructionArgsType(ins.args)
|
|
61
|
+
const accountType = codeGenAccountType(ins.accounts)
|
|
62
|
+
|
|
63
|
+
return `
|
|
64
|
+
on${
|
|
65
|
+
instructionName.charAt(0).toUpperCase() + instructionName.slice(1)
|
|
66
|
+
}(handler: (args: ${argsType}, accounts: ${accountType}, ctx: SolanaContext) => void): ${idlName}Processor {
|
|
67
|
+
this.onInstruction('${instructionName}', (ins: Instruction, ctx, accounts: string[]) => {
|
|
68
|
+
const origin = ins.data as any
|
|
69
|
+
if (origin) {
|
|
70
|
+
const data = ${codeGenInstructionArgs(ins.args)}
|
|
71
|
+
const accountData = ${codeGenAccountTypeArgs(ins.accounts)}
|
|
72
|
+
handler(data, accountData, ctx)
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
return this
|
|
76
|
+
}
|
|
77
|
+
`
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function codeGenInstructionArgs(args: IdlField[]): string {
|
|
81
|
+
return `{ ${args.map((arg) => codeGenInstructionArg(arg.name, arg.type)).join(', ')} }`
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function codeGenInstructionArg(name: string, type: IdlType): string {
|
|
85
|
+
const mType = mapType(type)
|
|
86
|
+
if (mType === 'bigint') {
|
|
87
|
+
return `${name}: BigInt(origin.${name}.toString())`
|
|
88
|
+
}
|
|
89
|
+
return `${name}: origin.${name} as ${mType}`
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function codeGenInstructionArgsType(args: IdlField[]): string {
|
|
93
|
+
return `{ ${args.map((arg) => arg.name + ': ' + mapType(arg.type)).join(', ')} }`
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function codeGenAccountType(args: IdlAccountItem[]): string {
|
|
97
|
+
return `{ ${args.map((arg) => arg.name + ': string').join(', ')} }`
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function codeGenAccountTypeArgs(args: IdlAccountItem[]): string {
|
|
101
|
+
return `{ ${args.map((arg, idx) => `${arg.name}: accounts[${idx}]`).join(', ')} }`
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Reference: https://github.com/coral-xyz/anchor/blob/93332766f13e86efbe77c9986722731742317ede/ts/src/program/namespace/types.ts#L104
|
|
105
|
+
function mapType(tpe: IdlType): string {
|
|
106
|
+
// TODO handle complex type
|
|
107
|
+
switch (tpe) {
|
|
108
|
+
case 'publicKey':
|
|
109
|
+
return 'PublicKey'
|
|
110
|
+
case 'bool':
|
|
111
|
+
return 'boolean'
|
|
112
|
+
case 'string':
|
|
113
|
+
return 'string'
|
|
114
|
+
case 'u8':
|
|
115
|
+
case 'i8':
|
|
116
|
+
case 'u16':
|
|
117
|
+
case 'i16':
|
|
118
|
+
case 'u32':
|
|
119
|
+
case 'i32':
|
|
120
|
+
case 'f32':
|
|
121
|
+
case 'f64':
|
|
122
|
+
return 'number'
|
|
123
|
+
case 'u64':
|
|
124
|
+
case 'i64':
|
|
125
|
+
case 'u128':
|
|
126
|
+
case 'i128':
|
|
127
|
+
return 'bigint'
|
|
128
|
+
default:
|
|
129
|
+
return 'any'
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function toPascalCase(str: string) {
|
|
134
|
+
return `${str}`
|
|
135
|
+
.toLowerCase()
|
|
136
|
+
.replace(new RegExp(/[-_]+/, 'g'), ' ')
|
|
137
|
+
.replace(new RegExp(/[^\w\s]/, 'g'), '')
|
|
138
|
+
.replace(new RegExp(/\s+(.)(\w*)/, 'g'), ($1, $2, $3) => `${$2.toUpperCase() + $3}`)
|
|
139
|
+
.replace(new RegExp(/\w/), (s) => s.toUpperCase())
|
|
140
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './codegen.js'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import path from 'path'
|
|
4
|
+
import { codeGenSolanaProcessor } from './codegen/codegen.js'
|
|
5
|
+
|
|
6
|
+
if (process.argv.length > 3) {
|
|
7
|
+
const abisDir = process.argv[2]
|
|
8
|
+
const targetDir = process.argv[3]
|
|
9
|
+
codeGenSolanaProcessor(abisDir, targetDir)
|
|
10
|
+
} else {
|
|
11
|
+
console.error('Not enough argument')
|
|
12
|
+
process.exit(1)
|
|
13
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { normalizeLabels, Labels, BaseContext, RecordMetaData, CHAIN_IDS } from '@sentio/sdk'
|
|
2
|
+
|
|
3
|
+
export class SolanaContext extends BaseContext {
|
|
4
|
+
network: string
|
|
5
|
+
address: string
|
|
6
|
+
programName: string
|
|
7
|
+
blockNumber: bigint
|
|
8
|
+
|
|
9
|
+
constructor(programName: string, network: string, address: string, slot: bigint) {
|
|
10
|
+
super()
|
|
11
|
+
this.network = network || CHAIN_IDS.SOLANA_MAINNET
|
|
12
|
+
this.programName = programName
|
|
13
|
+
this.address = address
|
|
14
|
+
this.blockNumber = slot
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getMetaData(name: string, labels: Labels): RecordMetaData {
|
|
18
|
+
return {
|
|
19
|
+
address: this.address,
|
|
20
|
+
contractName: this.programName,
|
|
21
|
+
blockNumber: this.blockNumber,
|
|
22
|
+
transactionIndex: 0,
|
|
23
|
+
transactionHash: '', // TODO add
|
|
24
|
+
logIndex: 0,
|
|
25
|
+
chainId: this.network,
|
|
26
|
+
name: name,
|
|
27
|
+
labels: normalizeLabels(labels),
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { InstructionCoder } from './solana-processor.js'
|
|
2
|
+
|
|
3
|
+
export class SolanaBindOptions {
|
|
4
|
+
address: string
|
|
5
|
+
network?: string
|
|
6
|
+
name?: string
|
|
7
|
+
startBlock?: bigint | number
|
|
8
|
+
endBlock?: bigint | number
|
|
9
|
+
processInnerInstruction?: boolean
|
|
10
|
+
instructionCoder?: InstructionCoder
|
|
11
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { errorString, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime'
|
|
2
|
+
import { ContractConfig, DataBinding, HandlerType, ProcessConfigResponse, ProcessResult } from '@sentio/protos'
|
|
3
|
+
|
|
4
|
+
import { ServerError, Status } from 'nice-grpc'
|
|
5
|
+
|
|
6
|
+
import { SolanaProcessorState } from './solana-processor.js'
|
|
7
|
+
import { Instruction as SolInstruction } from '@project-serum/anchor'
|
|
8
|
+
|
|
9
|
+
export class SolanaPlugin extends Plugin {
|
|
10
|
+
name: string = 'SolanaPlugin'
|
|
11
|
+
|
|
12
|
+
async configure(config: ProcessConfigResponse) {
|
|
13
|
+
// Part 2, prepare solana constractors
|
|
14
|
+
for (const solanaProcessor of SolanaProcessorState.INSTANCE.getValues()) {
|
|
15
|
+
const contractConfig: ContractConfig = {
|
|
16
|
+
transactionConfig: [],
|
|
17
|
+
processorType: USER_PROCESSOR,
|
|
18
|
+
contract: {
|
|
19
|
+
name: solanaProcessor.contractName,
|
|
20
|
+
chainId: solanaProcessor.network,
|
|
21
|
+
address: solanaProcessor.address,
|
|
22
|
+
abi: '',
|
|
23
|
+
},
|
|
24
|
+
logConfigs: [],
|
|
25
|
+
traceConfigs: [],
|
|
26
|
+
intervalConfigs: [],
|
|
27
|
+
startBlock: solanaProcessor.config.startSlot,
|
|
28
|
+
endBlock: 0n,
|
|
29
|
+
instructionConfig: {
|
|
30
|
+
innerInstruction: solanaProcessor.processInnerInstruction,
|
|
31
|
+
parsedInstruction: solanaProcessor.fromParsedInstruction !== null,
|
|
32
|
+
rawDataInstruction: solanaProcessor.decodeInstruction !== null,
|
|
33
|
+
},
|
|
34
|
+
aptosEventConfigs: [],
|
|
35
|
+
aptosCallConfigs: [],
|
|
36
|
+
}
|
|
37
|
+
config.contractConfigs.push(contractConfig)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
supportedHandlers = [HandlerType.SOL_INSTRUCTION]
|
|
42
|
+
|
|
43
|
+
processBinding(request: DataBinding): Promise<ProcessResult> {
|
|
44
|
+
switch (request.handlerType) {
|
|
45
|
+
case HandlerType.SOL_INSTRUCTION:
|
|
46
|
+
return this.processSolInstruction(request)
|
|
47
|
+
default:
|
|
48
|
+
throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async processSolInstruction(request: DataBinding): Promise<ProcessResult> {
|
|
53
|
+
if (!request.data) {
|
|
54
|
+
throw new ServerError(Status.INVALID_ARGUMENT, 'instruction data cannot be empty')
|
|
55
|
+
}
|
|
56
|
+
if (!request.data.solInstruction) {
|
|
57
|
+
throw new ServerError(Status.INVALID_ARGUMENT, 'instruction data cannot be empty')
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const instruction = request.data.solInstruction
|
|
61
|
+
const promises: Promise<ProcessResult>[] = []
|
|
62
|
+
|
|
63
|
+
// Only have instruction handlers for solana processors
|
|
64
|
+
for (const processor of SolanaProcessorState.INSTANCE.getValues()) {
|
|
65
|
+
if (processor.address === instruction.programAccountId) {
|
|
66
|
+
let parsedInstruction: SolInstruction | null = null
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
if (instruction.parsed) {
|
|
70
|
+
parsedInstruction = processor.getParsedInstruction(instruction.parsed as { type: string; info: any })
|
|
71
|
+
} else if (instruction.instructionData) {
|
|
72
|
+
parsedInstruction = processor.getParsedInstruction(instruction.instructionData)
|
|
73
|
+
}
|
|
74
|
+
} catch (e) {
|
|
75
|
+
throw new ServerError(
|
|
76
|
+
Status.INTERNAL,
|
|
77
|
+
'Failed to decode instruction: ' + JSON.stringify(instruction) + errorString(e)
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
if (parsedInstruction == null) {
|
|
81
|
+
continue
|
|
82
|
+
}
|
|
83
|
+
const insHandler = processor.getInstructionHandler(parsedInstruction)
|
|
84
|
+
if (insHandler == null) {
|
|
85
|
+
continue
|
|
86
|
+
}
|
|
87
|
+
const res = processor
|
|
88
|
+
.handleInstruction(parsedInstruction, instruction.accounts, insHandler, instruction.slot)
|
|
89
|
+
.catch((e) => {
|
|
90
|
+
throw new ServerError(
|
|
91
|
+
Status.INTERNAL,
|
|
92
|
+
'Error processing instruction: ' + JSON.stringify(instruction) + '\n' + errorString(e)
|
|
93
|
+
)
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
promises.push(res)
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return mergeProcessResults(await Promise.all(promises))
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
PluginManager.INSTANCE.register(new SolanaPlugin())
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ProcessResult } from '@sentio/protos'
|
|
2
|
+
import { SolanaContext } from './solana-context.js'
|
|
3
|
+
import { Instruction } from '@project-serum/anchor'
|
|
4
|
+
import { SolanaBindOptions } from './solana-options.js'
|
|
5
|
+
import { ListStateStorage } from '@sentio/runtime'
|
|
6
|
+
import { CHAIN_IDS } from '@sentio/sdk'
|
|
7
|
+
|
|
8
|
+
type IndexConfigure = {
|
|
9
|
+
startSlot: bigint
|
|
10
|
+
endSlot?: bigint
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface InstructionCoder {
|
|
14
|
+
decode(ix: Buffer | string, encoding?: 'hex' | 'base58'): Instruction | null
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type SolanaInstructionHandler = (instruction: Instruction, ctx: SolanaContext, accounts?: string[]) => void
|
|
18
|
+
|
|
19
|
+
export class SolanaProcessorState extends ListStateStorage<SolanaBaseProcessor> {
|
|
20
|
+
static INSTANCE: SolanaProcessorState = new SolanaProcessorState()
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class SolanaBaseProcessor {
|
|
24
|
+
public instructionHandlerMap: Map<string, SolanaInstructionHandler> = new Map()
|
|
25
|
+
address: string
|
|
26
|
+
endpoint: string
|
|
27
|
+
contractName: string
|
|
28
|
+
network: string
|
|
29
|
+
processInnerInstruction: boolean
|
|
30
|
+
config: IndexConfigure = { startSlot: 0n }
|
|
31
|
+
instructionCoder: InstructionCoder
|
|
32
|
+
|
|
33
|
+
decodeInstruction(rawInstruction: string): Instruction | null {
|
|
34
|
+
if (this.instructionCoder) {
|
|
35
|
+
return this.instructionCoder.decode(rawInstruction, 'base58')
|
|
36
|
+
}
|
|
37
|
+
return null
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
fromParsedInstruction: (instruction: { type: string; info: any }) => Instruction | null
|
|
41
|
+
|
|
42
|
+
constructor(options: SolanaBindOptions) {
|
|
43
|
+
this.address = options.address
|
|
44
|
+
this.contractName = options.name || ''
|
|
45
|
+
this.processInnerInstruction = options.processInnerInstruction || false
|
|
46
|
+
this.network = options.network || CHAIN_IDS.SOLANA_MAINNET
|
|
47
|
+
if (options.instructionCoder) {
|
|
48
|
+
this.instructionCoder = options.instructionCoder
|
|
49
|
+
}
|
|
50
|
+
if (options.startBlock) {
|
|
51
|
+
this.startSlot(options.startBlock)
|
|
52
|
+
}
|
|
53
|
+
if (options.endBlock) {
|
|
54
|
+
this.endBlock(options.endBlock)
|
|
55
|
+
}
|
|
56
|
+
this.endpoint = options.network || 'https://api.mainnet-beta.solana.com'
|
|
57
|
+
|
|
58
|
+
SolanaProcessorState.INSTANCE.addValue(this)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public onInstruction(instructionName: string, handler: SolanaInstructionHandler) {
|
|
62
|
+
this.instructionHandlerMap.set(instructionName, handler)
|
|
63
|
+
return this
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public getParsedInstruction(ins: string | { type: string; info: any }): Instruction | null {
|
|
67
|
+
if (ins) {
|
|
68
|
+
if ((ins as { type: string; info: any }).info) {
|
|
69
|
+
return this.fromParsedInstruction ? this.fromParsedInstruction(ins as { type: string; info: any }) : null
|
|
70
|
+
}
|
|
71
|
+
if (this.decodeInstruction != null) {
|
|
72
|
+
return this.decodeInstruction(ins as string)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return null
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public getInstructionHandler(parsedInstruction: Instruction): SolanaInstructionHandler | undefined {
|
|
79
|
+
return this.instructionHandlerMap.get(parsedInstruction.name)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public async handleInstruction(
|
|
83
|
+
parsedInstruction: Instruction,
|
|
84
|
+
accounts: string[],
|
|
85
|
+
handler: SolanaInstructionHandler,
|
|
86
|
+
slot: bigint
|
|
87
|
+
): Promise<ProcessResult> {
|
|
88
|
+
const ctx = new SolanaContext(this.contractName, this.network, this.address, slot)
|
|
89
|
+
await handler(parsedInstruction, ctx, accounts)
|
|
90
|
+
return ctx.getProcessResult()
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public startSlot(startSlot: bigint | number) {
|
|
94
|
+
this.config.startSlot = BigInt(startSlot)
|
|
95
|
+
return this
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public endBlock(endBlock: bigint | number) {
|
|
99
|
+
this.config.endSlot = BigInt(endBlock)
|
|
100
|
+
return this
|
|
101
|
+
}
|
|
102
|
+
}
|