starknet 3.18.2 → 3.19.0

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.
Files changed (158) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/__tests__/account.test.ts +11 -56
  3. package/__tests__/contract.test.ts +11 -49
  4. package/__tests__/defaultProvider.test.ts +321 -0
  5. package/__tests__/fixtures.ts +32 -11
  6. package/__tests__/rpcProvider.test.ts +17 -0
  7. package/__tests__/sequencerProvider.test.ts +45 -0
  8. package/account/default.d.ts +54 -77
  9. package/account/default.js +271 -596
  10. package/account/index.js +18 -31
  11. package/account/interface.d.ts +66 -95
  12. package/account/interface.js +20 -30
  13. package/constants.d.ts +17 -19
  14. package/constants.js +2038 -2059
  15. package/contract/contractFactory.d.ts +25 -29
  16. package/contract/contractFactory.js +94 -210
  17. package/contract/default.d.ts +117 -146
  18. package/contract/default.js +582 -776
  19. package/contract/index.js +19 -32
  20. package/contract/interface.d.ts +72 -92
  21. package/contract/interface.js +6 -5
  22. package/dist/account/default.d.ts +5 -9
  23. package/dist/account/default.js +35 -169
  24. package/dist/account/interface.d.ts +3 -15
  25. package/dist/contract/contractFactory.js +4 -4
  26. package/dist/contract/default.d.ts +3 -3
  27. package/dist/contract/default.js +3 -2
  28. package/dist/contract/interface.d.ts +2 -2
  29. package/dist/provider/default.d.ts +18 -134
  30. package/dist/provider/default.js +47 -411
  31. package/dist/provider/index.d.ts +2 -0
  32. package/dist/provider/index.js +2 -0
  33. package/dist/provider/interface.d.ts +45 -50
  34. package/dist/provider/rpc.d.ts +57 -0
  35. package/dist/provider/rpc.js +364 -0
  36. package/dist/provider/sequencer.d.ts +66 -0
  37. package/dist/provider/sequencer.js +443 -0
  38. package/dist/types/account.d.ts +2 -3
  39. package/dist/types/api/index.d.ts +16 -0
  40. package/dist/types/api/index.js +18 -0
  41. package/dist/types/api/rpc.d.ts +221 -0
  42. package/dist/types/{api.js → api/rpc.js} +0 -0
  43. package/dist/types/api/sequencer.d.ts +289 -0
  44. package/dist/types/api/sequencer.js +2 -0
  45. package/dist/types/index.d.ts +3 -1
  46. package/dist/types/index.js +15 -1
  47. package/dist/types/lib.d.ts +3 -1
  48. package/dist/types/provider.d.ts +86 -0
  49. package/dist/types/provider.js +2 -0
  50. package/dist/utils/provider.d.ts +4 -0
  51. package/dist/utils/provider.js +38 -0
  52. package/dist/utils/responseParser/index.d.ts +11 -0
  53. package/dist/utils/responseParser/index.js +9 -0
  54. package/dist/utils/responseParser/rpc.d.ts +13 -0
  55. package/dist/utils/responseParser/rpc.js +96 -0
  56. package/dist/utils/responseParser/sequencer.d.ts +13 -0
  57. package/dist/utils/responseParser/sequencer.js +124 -0
  58. package/index.js +42 -75
  59. package/package.json +1 -1
  60. package/provider/default.d.ts +21 -175
  61. package/provider/default.js +139 -704
  62. package/provider/errors.d.ts +4 -4
  63. package/provider/errors.js +30 -40
  64. package/provider/index.d.ts +2 -0
  65. package/provider/index.js +22 -33
  66. package/provider/interface.d.ts +104 -131
  67. package/provider/interface.js +6 -5
  68. package/provider/rpc.d.ts +57 -0
  69. package/provider/rpc.js +364 -0
  70. package/provider/sequencer.d.ts +66 -0
  71. package/provider/sequencer.js +443 -0
  72. package/provider/utils.d.ts +7 -9
  73. package/provider/utils.js +39 -44
  74. package/signer/default.d.ts +5 -9
  75. package/signer/default.js +72 -177
  76. package/signer/index.js +18 -31
  77. package/signer/interface.d.ts +29 -33
  78. package/signer/interface.js +6 -5
  79. package/src/account/default.ts +26 -146
  80. package/src/account/interface.ts +5 -20
  81. package/src/contract/contractFactory.ts +3 -6
  82. package/src/contract/default.ts +6 -4
  83. package/src/contract/interface.ts +2 -2
  84. package/src/provider/default.ts +63 -395
  85. package/src/provider/index.ts +2 -0
  86. package/src/provider/interface.ts +68 -63
  87. package/src/provider/rpc.ts +300 -0
  88. package/src/provider/sequencer.ts +384 -0
  89. package/src/types/account.ts +2 -3
  90. package/src/types/api/index.ts +17 -0
  91. package/src/types/api/rpc.ts +247 -0
  92. package/src/types/api/sequencer.ts +331 -0
  93. package/src/types/index.ts +3 -1
  94. package/src/types/lib.ts +3 -1
  95. package/src/types/provider.ts +108 -0
  96. package/src/utils/provider.ts +28 -0
  97. package/src/utils/responseParser/index.ts +28 -0
  98. package/src/utils/responseParser/rpc.ts +93 -0
  99. package/src/utils/responseParser/sequencer.ts +127 -0
  100. package/types/account.d.ts +5 -7
  101. package/types/account.js +2 -2
  102. package/types/api/index.d.ts +16 -0
  103. package/types/api/index.js +18 -0
  104. package/types/api/rpc.d.ts +221 -0
  105. package/types/api/rpc.js +2 -0
  106. package/types/api/sequencer.d.ts +289 -0
  107. package/types/api/sequencer.js +2 -0
  108. package/types/contract.d.ts +1 -1
  109. package/types/contract.js +2 -2
  110. package/types/index.d.ts +3 -1
  111. package/types/index.js +35 -34
  112. package/types/lib.d.ts +36 -41
  113. package/types/lib.js +2 -2
  114. package/types/provider.d.ts +86 -0
  115. package/types/provider.js +2 -0
  116. package/types/signer.d.ts +2 -2
  117. package/types/signer.js +2 -2
  118. package/utils/address.js +26 -37
  119. package/utils/ellipticCurve.d.ts +1 -6
  120. package/utils/ellipticCurve.js +73 -137
  121. package/utils/encode.js +49 -85
  122. package/utils/hash.d.ts +4 -31
  123. package/utils/hash.js +76 -141
  124. package/utils/json.d.ts +13 -45
  125. package/utils/json.js +15 -22
  126. package/utils/number.d.ts +2 -9
  127. package/utils/number.js +47 -81
  128. package/utils/provider.d.ts +4 -0
  129. package/utils/provider.js +38 -0
  130. package/utils/responseParser/index.d.ts +11 -0
  131. package/utils/responseParser/index.js +9 -0
  132. package/utils/responseParser/rpc.d.ts +13 -0
  133. package/utils/responseParser/rpc.js +96 -0
  134. package/utils/responseParser/sequencer.d.ts +13 -0
  135. package/utils/responseParser/sequencer.js +124 -0
  136. package/utils/shortString.js +13 -21
  137. package/utils/stark.d.ts +0 -1
  138. package/utils/stark.js +59 -93
  139. package/utils/transaction.d.ts +3 -6
  140. package/utils/transaction.js +50 -81
  141. package/utils/typedData/index.d.ts +3 -15
  142. package/utils/typedData/index.js +109 -175
  143. package/utils/typedData/types.d.ts +9 -9
  144. package/utils/typedData/types.js +2 -2
  145. package/utils/typedData/utils.js +6 -6
  146. package/utils/uint256.d.ts +5 -5
  147. package/utils/uint256.js +16 -26
  148. package/www/docs/API/account.md +3 -4
  149. package/www/docs/API/contract.md +2 -2
  150. package/www/docs/API/contractFactory.md +2 -2
  151. package/www/docs/API/provider.md +185 -74
  152. package/www/guides/account.md +1 -8
  153. package/www/guides/erc20.md +3 -0
  154. package/__tests__/provider.test.ts +0 -168
  155. package/dist/types/api.d.ts +0 -261
  156. package/src/types/api.ts +0 -303
  157. package/types/api.d.ts +0 -287
  158. package/types/api.js +0 -2
@@ -0,0 +1,364 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.RpcProvider = void 0;
43
+ var cross_fetch_1 = __importDefault(require("cross-fetch"));
44
+ var hash_1 = require("../utils/hash");
45
+ var json_1 = require("../utils/json");
46
+ var number_1 = require("../utils/number");
47
+ var provider_1 = require("../utils/provider");
48
+ var rpc_1 = require("../utils/responseParser/rpc");
49
+ var stark_1 = require("../utils/stark");
50
+ var RpcProvider = /** @class */ (function () {
51
+ function RpcProvider(optionsOrProvider) {
52
+ var _this = this;
53
+ this.responseParser = new rpc_1.RPCResponseParser();
54
+ var nodeUrl = optionsOrProvider.nodeUrl;
55
+ this.nodeUrl = nodeUrl;
56
+ this.getChainId().then(function (chainId) {
57
+ _this.chainId = chainId;
58
+ });
59
+ }
60
+ RpcProvider.prototype.fetchEndpoint = function (method, request) {
61
+ var _a;
62
+ return __awaiter(this, void 0, void 0, function () {
63
+ var requestData, rawResult, _b, error, result, code, message, error_1, data;
64
+ return __generator(this, function (_c) {
65
+ switch (_c.label) {
66
+ case 0:
67
+ requestData = {
68
+ method: method,
69
+ jsonrpc: '2.0',
70
+ params: request,
71
+ id: 0,
72
+ };
73
+ _c.label = 1;
74
+ case 1:
75
+ _c.trys.push([1, 4, , 5]);
76
+ return [4 /*yield*/, (0, cross_fetch_1.default)(this.nodeUrl, {
77
+ method: 'POST',
78
+ body: (0, json_1.stringify)(requestData),
79
+ headers: {
80
+ 'Content-Type': 'application/json',
81
+ },
82
+ })];
83
+ case 2:
84
+ rawResult = _c.sent();
85
+ return [4 /*yield*/, rawResult.json()];
86
+ case 3:
87
+ _b = _c.sent(), error = _b.error, result = _b.result;
88
+ if (error) {
89
+ code = error.code, message = error.message;
90
+ throw new Error("".concat(code, ": ").concat(message));
91
+ }
92
+ else {
93
+ return [2 /*return*/, result];
94
+ }
95
+ return [3 /*break*/, 5];
96
+ case 4:
97
+ error_1 = _c.sent();
98
+ data = (_a = error_1 === null || error_1 === void 0 ? void 0 : error_1.response) === null || _a === void 0 ? void 0 : _a.data;
99
+ if (data === null || data === void 0 ? void 0 : data.message) {
100
+ throw new Error("".concat(data.code, ": ").concat(data.message));
101
+ }
102
+ throw error_1;
103
+ case 5: return [2 /*return*/];
104
+ }
105
+ });
106
+ });
107
+ };
108
+ RpcProvider.prototype.getChainId = function () {
109
+ return __awaiter(this, void 0, void 0, function () {
110
+ return __generator(this, function (_a) {
111
+ return [2 /*return*/, this.fetchEndpoint('starknet_chainId')];
112
+ });
113
+ });
114
+ };
115
+ RpcProvider.prototype.getBlock = function (blockIdentifier) {
116
+ if (blockIdentifier === void 0) { blockIdentifier = 'pending'; }
117
+ return __awaiter(this, void 0, void 0, function () {
118
+ var method;
119
+ return __generator(this, function (_a) {
120
+ method = typeof blockIdentifier === 'string' && (0, number_1.isHex)(blockIdentifier)
121
+ ? 'starknet_getBlockByHash'
122
+ : 'starknet_getBlockByNumber';
123
+ return [2 /*return*/, this.fetchEndpoint(method, [blockIdentifier]).then(this.responseParser.parseGetBlockResponse)];
124
+ });
125
+ });
126
+ };
127
+ RpcProvider.prototype.getStorageAt = function (contractAddress, key, blockHashOrTag) {
128
+ if (blockHashOrTag === void 0) { blockHashOrTag = 'pending'; }
129
+ return __awaiter(this, void 0, void 0, function () {
130
+ var parsedKey;
131
+ return __generator(this, function (_a) {
132
+ parsedKey = (0, number_1.toHex)((0, number_1.toBN)(key));
133
+ return [2 /*return*/, this.fetchEndpoint('starknet_getStorageAt', [
134
+ contractAddress,
135
+ parsedKey,
136
+ blockHashOrTag,
137
+ ])];
138
+ });
139
+ });
140
+ };
141
+ RpcProvider.prototype.getTransaction = function (txHash) {
142
+ return __awaiter(this, void 0, void 0, function () {
143
+ return __generator(this, function (_a) {
144
+ return [2 /*return*/, this.fetchEndpoint('starknet_getTransactionByHash', [txHash]).then(this.responseParser.parseGetTransactionResponse)];
145
+ });
146
+ });
147
+ };
148
+ RpcProvider.prototype.getTransactionReceipt = function (txHash) {
149
+ return __awaiter(this, void 0, void 0, function () {
150
+ return __generator(this, function (_a) {
151
+ return [2 /*return*/, this.fetchEndpoint('starknet_getTransactionReceipt', [txHash]).then(this.responseParser.parseGetTransactionReceiptResponse)];
152
+ });
153
+ });
154
+ };
155
+ RpcProvider.prototype.getClassAt = function (contractAddress, _blockIdentifier) {
156
+ if (_blockIdentifier === void 0) { _blockIdentifier = 'pending'; }
157
+ return __awaiter(this, void 0, void 0, function () {
158
+ return __generator(this, function (_a) {
159
+ return [2 /*return*/, this.fetchEndpoint('starknet_getClassAt', [contractAddress])];
160
+ });
161
+ });
162
+ };
163
+ RpcProvider.prototype.getEstimateFee = function (invocation, blockIdentifier, invocationDetails) {
164
+ if (blockIdentifier === void 0) { blockIdentifier = 'pending'; }
165
+ if (invocationDetails === void 0) { invocationDetails = {}; }
166
+ return __awaiter(this, void 0, void 0, function () {
167
+ return __generator(this, function (_a) {
168
+ return [2 /*return*/, this.fetchEndpoint('starknet_estimateFee', [
169
+ {
170
+ contract_address: invocation.contractAddress,
171
+ entry_point_selector: (0, hash_1.getSelectorFromName)(invocation.entrypoint),
172
+ calldata: (0, provider_1.parseCalldata)(invocation.calldata),
173
+ signature: (0, number_1.bigNumberishArrayToDecimalStringArray)(invocation.signature || []),
174
+ version: (0, number_1.toHex)((0, number_1.toBN)((invocationDetails === null || invocationDetails === void 0 ? void 0 : invocationDetails.version) || 0)),
175
+ },
176
+ blockIdentifier,
177
+ ]).then(this.responseParser.parseFeeEstimateResponse)];
178
+ });
179
+ });
180
+ };
181
+ RpcProvider.prototype.declareContract = function (_a) {
182
+ var contract = _a.contract, version = _a.version;
183
+ return __awaiter(this, void 0, void 0, function () {
184
+ var contractDefinition;
185
+ return __generator(this, function (_b) {
186
+ contractDefinition = (0, provider_1.parseContract)(contract);
187
+ return [2 /*return*/, this.fetchEndpoint('starknet_addDeclareTransaction', [
188
+ {
189
+ program: contractDefinition.program,
190
+ entry_points_by_type: contractDefinition.entry_points_by_type,
191
+ },
192
+ (0, number_1.toHex)((0, number_1.toBN)(version || 0)),
193
+ ]).then(this.responseParser.parseDeclareContractResponse)];
194
+ });
195
+ });
196
+ };
197
+ RpcProvider.prototype.deployContract = function (_a) {
198
+ var contract = _a.contract, constructorCalldata = _a.constructorCalldata, addressSalt = _a.addressSalt;
199
+ return __awaiter(this, void 0, void 0, function () {
200
+ var contractDefinition;
201
+ return __generator(this, function (_b) {
202
+ contractDefinition = (0, provider_1.parseContract)(contract);
203
+ return [2 /*return*/, this.fetchEndpoint('starknet_addDeployTransaction', [
204
+ addressSalt !== null && addressSalt !== void 0 ? addressSalt : (0, stark_1.randomAddress)(),
205
+ (0, number_1.bigNumberishArrayToDecimalStringArray)(constructorCalldata !== null && constructorCalldata !== void 0 ? constructorCalldata : []),
206
+ {
207
+ program: contractDefinition.program,
208
+ entry_points_by_type: contractDefinition.entry_points_by_type,
209
+ },
210
+ ]).then(this.responseParser.parseDeployContractResponse)];
211
+ });
212
+ });
213
+ };
214
+ RpcProvider.prototype.invokeFunction = function (functionInvocation, details) {
215
+ return __awaiter(this, void 0, void 0, function () {
216
+ return __generator(this, function (_a) {
217
+ return [2 /*return*/, this.fetchEndpoint('starknet_addInvokeTransaction', [
218
+ {
219
+ contract_address: functionInvocation.contractAddress,
220
+ entry_point_selector: (0, hash_1.getSelectorFromName)(functionInvocation.entrypoint),
221
+ calldata: (0, provider_1.parseCalldata)(functionInvocation.calldata),
222
+ },
223
+ (0, number_1.bigNumberishArrayToDecimalStringArray)(functionInvocation.signature || []),
224
+ (0, number_1.toHex)((0, number_1.toBN)(details.maxFee || 0)),
225
+ (0, number_1.toHex)((0, number_1.toBN)(details.version || 0)),
226
+ ]).then(this.responseParser.parseInvokeFunctionResponse)];
227
+ });
228
+ });
229
+ };
230
+ RpcProvider.prototype.callContract = function (call, blockIdentifier) {
231
+ if (blockIdentifier === void 0) { blockIdentifier = 'pending'; }
232
+ return __awaiter(this, void 0, void 0, function () {
233
+ var result;
234
+ return __generator(this, function (_a) {
235
+ switch (_a.label) {
236
+ case 0: return [4 /*yield*/, this.fetchEndpoint('starknet_call', [
237
+ {
238
+ contract_address: call.contractAddress,
239
+ entry_point_selector: (0, hash_1.getSelectorFromName)(call.entrypoint),
240
+ calldata: (0, provider_1.parseCalldata)(call.calldata),
241
+ },
242
+ blockIdentifier,
243
+ ])];
244
+ case 1:
245
+ result = _a.sent();
246
+ return [2 /*return*/, this.responseParser.parseCallContractResponse(result)];
247
+ }
248
+ });
249
+ });
250
+ };
251
+ RpcProvider.prototype.waitForTransaction = function (txHash, retryInterval) {
252
+ if (retryInterval === void 0) { retryInterval = 8000; }
253
+ return __awaiter(this, void 0, void 0, function () {
254
+ var onchain, retries, successStates, errorStates, res, message, error, error_2;
255
+ return __generator(this, function (_a) {
256
+ switch (_a.label) {
257
+ case 0:
258
+ onchain = false;
259
+ retries = 100;
260
+ _a.label = 1;
261
+ case 1:
262
+ if (!!onchain) return [3 /*break*/, 7];
263
+ successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING'];
264
+ errorStates = ['REJECTED', 'NOT_RECEIVED'];
265
+ // eslint-disable-next-line no-await-in-loop
266
+ return [4 /*yield*/, (0, provider_1.wait)(retryInterval)];
267
+ case 2:
268
+ // eslint-disable-next-line no-await-in-loop
269
+ _a.sent();
270
+ _a.label = 3;
271
+ case 3:
272
+ _a.trys.push([3, 5, , 6]);
273
+ return [4 /*yield*/, this.getTransactionReceipt(txHash)];
274
+ case 4:
275
+ res = _a.sent();
276
+ if (successStates.includes(res.status)) {
277
+ onchain = true;
278
+ }
279
+ else if (errorStates.includes(res.status)) {
280
+ message = res.status;
281
+ error = new Error(message);
282
+ error.response = res;
283
+ throw error;
284
+ }
285
+ return [3 /*break*/, 6];
286
+ case 5:
287
+ error_2 = _a.sent();
288
+ if (error_2 instanceof Error && errorStates.includes(error_2.message)) {
289
+ throw error_2;
290
+ }
291
+ if (retries === 0) {
292
+ throw error_2;
293
+ }
294
+ return [3 /*break*/, 6];
295
+ case 6:
296
+ retries -= 1;
297
+ return [3 /*break*/, 1];
298
+ case 7: return [4 /*yield*/, (0, provider_1.wait)(retryInterval)];
299
+ case 8:
300
+ _a.sent();
301
+ return [2 /*return*/];
302
+ }
303
+ });
304
+ });
305
+ };
306
+ /**
307
+ * Gets the transaction count from a block.
308
+ *
309
+ *
310
+ * @param blockIdentifier
311
+ * @returns Number of transactions
312
+ */
313
+ RpcProvider.prototype.getTransactionCount = function (blockIdentifier) {
314
+ return __awaiter(this, void 0, void 0, function () {
315
+ return __generator(this, function (_a) {
316
+ if (typeof blockIdentifier === 'number') {
317
+ return [2 /*return*/, this.fetchEndpoint('starknet_getBlockTransactionCountByNumber', [blockIdentifier])];
318
+ }
319
+ return [2 /*return*/, this.fetchEndpoint('starknet_getBlockTransactionCountByHash', [blockIdentifier])];
320
+ });
321
+ });
322
+ };
323
+ /**
324
+ * Gets the latest block number
325
+ *
326
+ *
327
+ * @returns Number of the latest block
328
+ */
329
+ RpcProvider.prototype.getBlockNumber = function () {
330
+ return __awaiter(this, void 0, void 0, function () {
331
+ return __generator(this, function (_a) {
332
+ return [2 /*return*/, this.fetchEndpoint('starknet_blockNumber')];
333
+ });
334
+ });
335
+ };
336
+ /**
337
+ * Gets syncing status of the node
338
+ *
339
+ *
340
+ * @returns Object with the stats data
341
+ */
342
+ RpcProvider.prototype.getSyncingStats = function () {
343
+ return __awaiter(this, void 0, void 0, function () {
344
+ return __generator(this, function (_a) {
345
+ return [2 /*return*/, this.fetchEndpoint('starknet_syncing')];
346
+ });
347
+ });
348
+ };
349
+ /**
350
+ * Gets all the events filtered
351
+ *
352
+ *
353
+ * @returns events and the pagination of the events
354
+ */
355
+ RpcProvider.prototype.getEvents = function (eventFilter) {
356
+ return __awaiter(this, void 0, void 0, function () {
357
+ return __generator(this, function (_a) {
358
+ return [2 /*return*/, this.fetchEndpoint('starknet_getEvents', [eventFilter])];
359
+ });
360
+ });
361
+ };
362
+ return RpcProvider;
363
+ }());
364
+ exports.RpcProvider = RpcProvider;
@@ -0,0 +1,66 @@
1
+ import { StarknetChainId } from '../constants';
2
+ import { BlockTag, Call, CallContractResponse, ContractClass, DeclareContractPayload, DeclareContractResponse, DeployContractPayload, DeployContractResponse, EstimateFeeResponse, GetBlockResponse, GetTransactionReceiptResponse, GetTransactionResponse, Invocation, InvocationsDetails, InvokeFunctionResponse } from '../types';
3
+ import { GetContractAddressesResponse, GetTransactionStatusResponse, GetTransactionTraceResponse, Sequencer } from '../types/api';
4
+ import { BigNumberish } from '../utils/number';
5
+ import { ProviderInterface } from './interface';
6
+ import { BlockIdentifier } from './utils';
7
+ declare type NetworkName = 'mainnet-alpha' | 'goerli-alpha';
8
+ export declare type SequencerProviderOptions = {
9
+ network: NetworkName;
10
+ } | {
11
+ baseUrl: string;
12
+ feederGatewayUrl?: string;
13
+ gatewayUrl?: string;
14
+ chainId?: StarknetChainId;
15
+ };
16
+ export declare class SequencerProvider implements ProviderInterface {
17
+ baseUrl: string;
18
+ feederGatewayUrl: string;
19
+ gatewayUrl: string;
20
+ chainId: StarknetChainId;
21
+ private responseParser;
22
+ constructor(optionsOrProvider?: SequencerProviderOptions);
23
+ protected static getNetworkFromName(name: NetworkName): "https://alpha-mainnet.starknet.io" | "https://alpha4.starknet.io";
24
+ protected static getChainIdFromBaseUrl(baseUrl: string): StarknetChainId;
25
+ private getFetchUrl;
26
+ private getFetchMethod;
27
+ private getQueryString;
28
+ private getHeaders;
29
+ protected fetchEndpoint<T extends keyof Sequencer.Endpoints>(endpoint: T, ...[query, request]: Sequencer.Endpoints[T]['QUERY'] extends never ? Sequencer.Endpoints[T]['REQUEST'] extends never ? [] : [undefined, Sequencer.Endpoints[T]['REQUEST']] : Sequencer.Endpoints[T]['REQUEST'] extends never ? [Sequencer.Endpoints[T]['QUERY']] : [Sequencer.Endpoints[T]['QUERY'], Sequencer.Endpoints[T]['REQUEST']]): Promise<Sequencer.Endpoints[T]['RESPONSE']>;
30
+ callContract({ contractAddress, entrypoint: entryPointSelector, calldata }: Call, blockIdentifier?: BlockIdentifier): Promise<CallContractResponse>;
31
+ getBlock(blockIdentifier?: BlockIdentifier): Promise<GetBlockResponse>;
32
+ getStorageAt(contractAddress: string, key: BigNumberish, blockHashOrTag?: BlockTag | BigNumberish): Promise<BigNumberish>;
33
+ getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse>;
34
+ getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse>;
35
+ getClassAt(contractAddress: string, blockIdentifier?: BlockIdentifier): Promise<ContractClass>;
36
+ invokeFunction(functionInvocation: Invocation, details: InvocationsDetails): Promise<InvokeFunctionResponse>;
37
+ deployContract({ contract, constructorCalldata, addressSalt, }: DeployContractPayload): Promise<DeployContractResponse>;
38
+ declareContract({ contract, }: DeclareContractPayload): Promise<DeclareContractResponse>;
39
+ getEstimateFee(invocation: Invocation, blockIdentifier?: BlockIdentifier, invocationDetails?: InvocationsDetails): Promise<EstimateFeeResponse>;
40
+ waitForTransaction(txHash: BigNumberish, retryInterval?: number): Promise<void>;
41
+ /**
42
+ * Gets the status of a transaction.
43
+ *
44
+ * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L48-L52)
45
+ *
46
+ * @param txHash
47
+ * @returns the transaction status object { block_number, tx_status: NOT_RECEIVED | RECEIVED | PENDING | REJECTED | ACCEPTED_ONCHAIN }
48
+ */
49
+ getTransactionStatus(txHash: BigNumberish): Promise<GetTransactionStatusResponse>;
50
+ /**
51
+ * Gets the smart contract address on the goerli testnet.
52
+ *
53
+ * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L13-L15)
54
+ * @returns starknet smart contract addresses
55
+ */
56
+ getContractAddresses(): Promise<GetContractAddressesResponse>;
57
+ /**
58
+ * Gets the transaction trace from a tx id.
59
+ *
60
+ *
61
+ * @param txHash
62
+ * @returns the transaction trace
63
+ */
64
+ getTransactionTrace(txHash: BigNumberish): Promise<GetTransactionTraceResponse>;
65
+ }
66
+ export {};