starknet 6.9.0 → 6.10.1

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 (315) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +1 -1
  3. package/README.md +5 -9
  4. package/dist/account/default.cjs +655 -0
  5. package/dist/account/default.d.ts +67 -0
  6. package/dist/account/default.mjs +652 -0
  7. package/dist/account/index.cjs +27 -0
  8. package/dist/account/index.d.ts +2 -0
  9. package/dist/account/index.mjs +2 -0
  10. package/dist/account/interface.cjs +9 -0
  11. package/dist/account/interface.d.ts +301 -0
  12. package/dist/account/interface.mjs +3 -0
  13. package/dist/channel/index.cjs +27 -0
  14. package/dist/channel/index.d.ts +3 -0
  15. package/dist/channel/index.mjs +3 -0
  16. package/dist/channel/rpc_0_6.cjs +607 -0
  17. package/dist/channel/rpc_0_6.d.ts +78 -0
  18. package/dist/channel/rpc_0_6.mjs +543 -0
  19. package/dist/channel/rpc_0_7.cjs +619 -0
  20. package/dist/channel/rpc_0_7.d.ts +81 -0
  21. package/dist/channel/rpc_0_7.mjs +561 -0
  22. package/dist/constants.cjs +76 -0
  23. package/dist/constants.d.ts +70 -0
  24. package/dist/constants.mjs +60 -0
  25. package/dist/contract/contractFactory.cjs +93 -0
  26. package/dist/contract/contractFactory.d.ts +46 -0
  27. package/dist/contract/contractFactory.mjs +83 -0
  28. package/dist/contract/default.cjs +269 -0
  29. package/dist/contract/default.d.ts +58 -0
  30. package/dist/contract/default.mjs +254 -0
  31. package/dist/contract/index.cjs +38 -0
  32. package/dist/contract/index.d.ts +3 -0
  33. package/dist/contract/index.mjs +3 -0
  34. package/dist/contract/interface.cjs +13 -0
  35. package/dist/contract/interface.d.ts +128 -0
  36. package/dist/contract/interface.mjs +6 -0
  37. package/dist/index.cjs +267 -0
  38. package/dist/index.d.ts +45 -5991
  39. package/dist/index.global.js +728 -609
  40. package/dist/index.global.js.map +1 -1
  41. package/dist/index.mjs +39 -7320
  42. package/dist/provider/errors.cjs +50 -0
  43. package/dist/provider/errors.d.ts +16 -0
  44. package/dist/provider/errors.mjs +35 -0
  45. package/dist/provider/extensions/default.cjs +11 -0
  46. package/dist/provider/extensions/default.d.ts +6 -0
  47. package/dist/provider/extensions/default.mjs +5 -0
  48. package/dist/provider/extensions/starknetId.cjs +174 -0
  49. package/dist/provider/extensions/starknetId.d.ts +10 -0
  50. package/dist/provider/extensions/starknetId.mjs +230 -0
  51. package/dist/provider/index.cjs +56 -0
  52. package/dist/provider/index.d.ts +6 -0
  53. package/dist/provider/index.mjs +6 -0
  54. package/dist/provider/interface.cjs +8 -0
  55. package/dist/provider/interface.d.ts +261 -0
  56. package/dist/provider/interface.mjs +2 -0
  57. package/dist/provider/rpc.cjs +301 -0
  58. package/dist/provider/rpc.d.ts +115 -0
  59. package/dist/provider/rpc.mjs +302 -0
  60. package/dist/service/types.cjs +1 -0
  61. package/dist/service/types.d.ts +5 -0
  62. package/dist/service/types.mjs +0 -0
  63. package/dist/signer/default.cjs +105 -0
  64. package/dist/signer/default.d.ts +12 -0
  65. package/dist/signer/default.mjs +102 -0
  66. package/dist/signer/ethSigner.cjs +123 -0
  67. package/dist/signer/ethSigner.d.ts +25 -0
  68. package/dist/signer/ethSigner.mjs +140 -0
  69. package/dist/signer/index.cjs +38 -0
  70. package/dist/signer/index.d.ts +3 -0
  71. package/dist/signer/index.mjs +3 -0
  72. package/dist/signer/interface.cjs +8 -0
  73. package/dist/signer/interface.d.ts +115 -0
  74. package/dist/signer/interface.mjs +2 -0
  75. package/dist/types/account.cjs +1 -0
  76. package/dist/types/account.d.ts +79 -0
  77. package/dist/types/account.mjs +0 -0
  78. package/dist/types/api/index.cjs +30 -0
  79. package/dist/types/api/index.d.ts +4 -0
  80. package/dist/types/api/index.mjs +4 -0
  81. package/dist/types/api/jsonrpc/index.cjs +1 -0
  82. package/dist/types/api/jsonrpc/index.d.ts +21 -0
  83. package/dist/types/api/jsonrpc/index.mjs +0 -0
  84. package/dist/types/api/rpcspec_0_6/components.cjs +1 -0
  85. package/dist/types/api/rpcspec_0_6/components.d.ts +541 -0
  86. package/dist/types/api/rpcspec_0_6/components.mjs +0 -0
  87. package/dist/types/api/rpcspec_0_6/contract.cjs +1 -0
  88. package/dist/types/api/rpcspec_0_6/contract.d.ts +85 -0
  89. package/dist/types/api/rpcspec_0_6/contract.mjs +0 -0
  90. package/dist/types/api/rpcspec_0_6/errors.cjs +1 -0
  91. package/dist/types/api/rpcspec_0_6/errors.d.ts +128 -0
  92. package/dist/types/api/rpcspec_0_6/errors.mjs +0 -0
  93. package/dist/types/api/rpcspec_0_6/index.cjs +45 -0
  94. package/dist/types/api/rpcspec_0_6/index.d.ts +8 -0
  95. package/dist/types/api/rpcspec_0_6/index.mjs +5 -0
  96. package/dist/types/api/rpcspec_0_6/methods.cjs +1 -0
  97. package/dist/types/api/rpcspec_0_6/methods.d.ts +207 -0
  98. package/dist/types/api/rpcspec_0_6/methods.mjs +0 -0
  99. package/dist/types/api/rpcspec_0_6/nonspec.cjs +65 -0
  100. package/dist/types/api/rpcspec_0_6/nonspec.d.ts +147 -0
  101. package/dist/types/api/rpcspec_0_6/nonspec.mjs +59 -0
  102. package/dist/types/cairoEnum.cjs +1 -0
  103. package/dist/types/cairoEnum.d.ts +2 -0
  104. package/dist/types/cairoEnum.mjs +0 -0
  105. package/dist/types/calldata.cjs +27 -0
  106. package/dist/types/calldata.d.ts +23 -0
  107. package/dist/types/calldata.mjs +21 -0
  108. package/dist/types/contract.cjs +1 -0
  109. package/dist/types/contract.d.ts +27 -0
  110. package/dist/types/contract.mjs +0 -0
  111. package/dist/types/helpers/valuesType.cjs +1 -0
  112. package/dist/types/helpers/valuesType.d.ts +1 -0
  113. package/dist/types/helpers/valuesType.mjs +0 -0
  114. package/dist/types/index.cjs +121 -0
  115. package/dist/types/index.d.ts +10 -0
  116. package/dist/types/index.mjs +10 -0
  117. package/dist/types/lib/contract/abi.cjs +1 -0
  118. package/dist/types/lib/contract/abi.d.ts +71 -0
  119. package/dist/types/lib/contract/abi.mjs +0 -0
  120. package/dist/types/lib/contract/index.cjs +50 -0
  121. package/dist/types/lib/contract/index.d.ts +26 -0
  122. package/dist/types/lib/contract/index.mjs +8 -0
  123. package/dist/types/lib/contract/legacy.cjs +1 -0
  124. package/dist/types/lib/contract/legacy.d.ts +33 -0
  125. package/dist/types/lib/contract/legacy.mjs +0 -0
  126. package/dist/types/lib/contract/sierra.cjs +1 -0
  127. package/dist/types/lib/contract/sierra.d.ts +52 -0
  128. package/dist/types/lib/contract/sierra.mjs +0 -0
  129. package/dist/types/lib/index.cjs +61 -0
  130. package/dist/types/lib/index.d.ts +259 -0
  131. package/dist/types/lib/index.mjs +36 -0
  132. package/dist/types/provider/configuration.cjs +1 -0
  133. package/dist/types/provider/configuration.d.ts +20 -0
  134. package/dist/types/provider/configuration.mjs +0 -0
  135. package/dist/types/provider/index.cjs +27 -0
  136. package/dist/types/provider/index.d.ts +2 -0
  137. package/dist/types/provider/index.mjs +2 -0
  138. package/dist/types/provider/response.cjs +30 -0
  139. package/dist/types/provider/response.d.ts +98 -0
  140. package/dist/types/provider/response.mjs +1 -0
  141. package/dist/types/provider/spec.cjs +1 -0
  142. package/dist/types/provider/spec.d.ts +49 -0
  143. package/dist/types/provider/spec.mjs +0 -0
  144. package/dist/types/signer.cjs +1 -0
  145. package/dist/types/signer.d.ts +49 -0
  146. package/dist/types/signer.mjs +0 -0
  147. package/dist/types/transactionReceipt.cjs +1 -0
  148. package/dist/types/transactionReceipt.d.ts +23 -0
  149. package/dist/types/transactionReceipt.mjs +0 -0
  150. package/dist/types/typedData.cjs +12 -0
  151. package/dist/types/typedData.d.ts +1 -0
  152. package/dist/types/typedData.mjs +3 -0
  153. package/dist/utils/address.cjs +44 -0
  154. package/dist/utils/address.d.ts +55 -0
  155. package/dist/utils/address.mjs +35 -0
  156. package/dist/utils/assert.cjs +11 -0
  157. package/dist/utils/assert.d.ts +12 -0
  158. package/dist/utils/assert.mjs +5 -0
  159. package/dist/utils/cairoDataTypes/felt.cjs +31 -0
  160. package/dist/utils/cairoDataTypes/felt.d.ts +6 -0
  161. package/dist/utils/cairoDataTypes/felt.mjs +27 -0
  162. package/dist/utils/cairoDataTypes/uint256.cjs +113 -0
  163. package/dist/utils/cairoDataTypes/uint256.d.ts +72 -0
  164. package/dist/utils/cairoDataTypes/uint256.mjs +103 -0
  165. package/dist/utils/cairoDataTypes/uint512.cjs +125 -0
  166. package/dist/utils/cairoDataTypes/uint512.d.ts +76 -0
  167. package/dist/utils/cairoDataTypes/uint512.mjs +123 -0
  168. package/dist/utils/calldata/byteArray.cjs +27 -0
  169. package/dist/utils/calldata/byteArray.d.ts +32 -0
  170. package/dist/utils/calldata/byteArray.mjs +20 -0
  171. package/dist/utils/calldata/cairo.cjs +114 -0
  172. package/dist/utils/calldata/cairo.d.ts +196 -0
  173. package/dist/utils/calldata/cairo.mjs +68 -0
  174. package/dist/utils/calldata/enum/CairoCustomEnum.cjs +55 -0
  175. package/dist/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  176. package/dist/utils/calldata/enum/CairoCustomEnum.mjs +50 -0
  177. package/dist/utils/calldata/enum/CairoOption.cjs +55 -0
  178. package/dist/utils/calldata/enum/CairoOption.d.ts +37 -0
  179. package/dist/utils/calldata/enum/CairoOption.mjs +50 -0
  180. package/dist/utils/calldata/enum/CairoResult.cjs +54 -0
  181. package/dist/utils/calldata/enum/CairoResult.d.ts +36 -0
  182. package/dist/utils/calldata/enum/CairoResult.mjs +47 -0
  183. package/dist/utils/calldata/enum/index.cjs +38 -0
  184. package/dist/utils/calldata/enum/index.d.ts +3 -0
  185. package/dist/utils/calldata/enum/index.mjs +3 -0
  186. package/dist/utils/calldata/formatter.cjs +55 -0
  187. package/dist/utils/calldata/formatter.d.ts +9 -0
  188. package/dist/utils/calldata/formatter.mjs +58 -0
  189. package/dist/utils/calldata/index.cjs +272 -0
  190. package/dist/utils/calldata/index.d.ts +90 -0
  191. package/dist/utils/calldata/index.mjs +276 -0
  192. package/dist/utils/calldata/parser/index.cjs +29 -0
  193. package/dist/utils/calldata/parser/index.d.ts +5 -0
  194. package/dist/utils/calldata/parser/index.mjs +21 -0
  195. package/dist/utils/calldata/parser/interface.cjs +8 -0
  196. package/dist/utils/calldata/parser/interface.d.ts +20 -0
  197. package/dist/utils/calldata/parser/interface.mjs +2 -0
  198. package/dist/utils/calldata/parser/parser-0-1.1.0.cjs +38 -0
  199. package/dist/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  200. package/dist/utils/calldata/parser/parser-0-1.1.0.mjs +31 -0
  201. package/dist/utils/calldata/parser/parser-2.0.0.cjs +42 -0
  202. package/dist/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  203. package/dist/utils/calldata/parser/parser-2.0.0.mjs +37 -0
  204. package/dist/utils/calldata/propertyOrder.cjs +159 -0
  205. package/dist/utils/calldata/propertyOrder.d.ts +2 -0
  206. package/dist/utils/calldata/propertyOrder.mjs +189 -0
  207. package/dist/utils/calldata/requestParser.cjs +204 -0
  208. package/dist/utils/calldata/requestParser.d.ts +11 -0
  209. package/dist/utils/calldata/requestParser.mjs +231 -0
  210. package/dist/utils/calldata/responseParser.cjs +200 -0
  211. package/dist/utils/calldata/responseParser.d.ts +11 -0
  212. package/dist/utils/calldata/responseParser.mjs +201 -0
  213. package/dist/utils/calldata/tuple.cjs +106 -0
  214. package/dist/utils/calldata/tuple.d.ts +6 -0
  215. package/dist/utils/calldata/tuple.mjs +88 -0
  216. package/dist/utils/calldata/validate.cjs +241 -0
  217. package/dist/utils/calldata/validate.d.ts +6 -0
  218. package/dist/utils/calldata/validate.mjs +315 -0
  219. package/dist/utils/contract.cjs +40 -0
  220. package/dist/utils/contract.d.ts +37 -0
  221. package/dist/utils/contract.mjs +31 -0
  222. package/dist/utils/ec.cjs +12 -0
  223. package/dist/utils/ec.d.ts +2 -0
  224. package/dist/utils/ec.mjs +2 -0
  225. package/dist/utils/encode.cjs +78 -0
  226. package/dist/utils/encode.d.ts +207 -0
  227. package/dist/utils/encode.mjs +56 -0
  228. package/dist/utils/eth.cjs +22 -0
  229. package/dist/utils/eth.d.ts +22 -0
  230. package/dist/utils/eth.mjs +14 -0
  231. package/dist/utils/events/index.cjs +144 -0
  232. package/dist/utils/events/index.d.ts +84 -0
  233. package/dist/utils/events/index.mjs +136 -0
  234. package/dist/utils/fetchPonyfill.cjs +14 -0
  235. package/dist/utils/fetchPonyfill.d.ts +2 -0
  236. package/dist/utils/fetchPonyfill.mjs +5 -0
  237. package/dist/utils/hash/classHash.cjs +151 -0
  238. package/dist/utils/hash/classHash.d.ts +120 -0
  239. package/dist/utils/hash/classHash.mjs +168 -0
  240. package/dist/utils/hash/index.cjs +49 -0
  241. package/dist/utils/hash/index.d.ts +7 -0
  242. package/dist/utils/hash/index.mjs +4 -0
  243. package/dist/utils/hash/selector.cjs +37 -0
  244. package/dist/utils/hash/selector.d.ts +57 -0
  245. package/dist/utils/hash/selector.mjs +28 -0
  246. package/dist/utils/hash/transactionHash/index.cjs +38 -0
  247. package/dist/utils/hash/transactionHash/index.d.ts +81 -0
  248. package/dist/utils/hash/transactionHash/index.mjs +102 -0
  249. package/dist/utils/hash/transactionHash/v2.cjs +31 -0
  250. package/dist/utils/hash/transactionHash/v2.d.ts +34 -0
  251. package/dist/utils/hash/transactionHash/v2.mjs +57 -0
  252. package/dist/utils/hash/transactionHash/v3.cjs +45 -0
  253. package/dist/utils/hash/transactionHash/v3.d.ts +24 -0
  254. package/dist/utils/hash/transactionHash/v3.mjs +80 -0
  255. package/dist/utils/json.cjs +21 -0
  256. package/dist/utils/json.d.ts +50 -0
  257. package/dist/utils/json.mjs +10 -0
  258. package/dist/utils/merkle.cjs +118 -0
  259. package/dist/utils/merkle.d.ts +87 -0
  260. package/dist/utils/merkle.mjs +114 -0
  261. package/dist/utils/num.cjs +109 -0
  262. package/dist/utils/num.d.ts +283 -0
  263. package/dist/utils/num.mjs +86 -0
  264. package/dist/utils/provider.cjs +182 -0
  265. package/dist/utils/provider.d.ts +217 -0
  266. package/dist/utils/provider.mjs +158 -0
  267. package/dist/utils/responseParser/index.cjs +27 -0
  268. package/dist/utils/responseParser/index.d.ts +2 -0
  269. package/dist/utils/responseParser/index.mjs +2 -0
  270. package/dist/utils/responseParser/interface.cjs +8 -0
  271. package/dist/utils/responseParser/interface.d.ts +13 -0
  272. package/dist/utils/responseParser/interface.mjs +2 -0
  273. package/dist/utils/responseParser/rpc.cjs +83 -0
  274. package/dist/utils/responseParser/rpc.d.ts +19 -0
  275. package/dist/utils/responseParser/rpc.mjs +77 -0
  276. package/dist/utils/shortString.cjs +56 -0
  277. package/dist/utils/shortString.d.ts +116 -0
  278. package/dist/utils/shortString.mjs +39 -0
  279. package/dist/utils/stark.cjs +137 -0
  280. package/dist/utils/stark.d.ts +224 -0
  281. package/dist/utils/stark.mjs +109 -0
  282. package/dist/utils/starknetId.cjs +196 -0
  283. package/dist/utils/starknetId.d.ts +182 -0
  284. package/dist/utils/starknetId.mjs +185 -0
  285. package/dist/utils/transaction.cjs +115 -0
  286. package/dist/utils/transaction.d.ts +185 -0
  287. package/dist/utils/transaction.mjs +98 -0
  288. package/dist/utils/transactionReceipt.cjs +54 -0
  289. package/dist/utils/transactionReceipt.d.ts +33 -0
  290. package/dist/utils/transactionReceipt.mjs +49 -0
  291. package/dist/utils/typedData.cjs +285 -0
  292. package/dist/utils/typedData.d.ts +54 -0
  293. package/dist/utils/typedData.mjs +286 -0
  294. package/dist/utils/uint256.cjs +30 -0
  295. package/dist/utils/uint256.d.ts +45 -0
  296. package/dist/utils/uint256.mjs +11 -0
  297. package/dist/utils/url.cjs +35 -0
  298. package/dist/utils/url.d.ts +29 -0
  299. package/dist/utils/url.mjs +27 -0
  300. package/dist/wallet/account.cjs +115 -0
  301. package/dist/wallet/account.d.ts +31 -0
  302. package/dist/wallet/account.mjs +112 -0
  303. package/dist/wallet/connect.cjs +90 -0
  304. package/dist/wallet/connect.d.ts +82 -0
  305. package/dist/wallet/connect.mjs +64 -0
  306. package/dist/wallet/index.cjs +16 -0
  307. package/dist/wallet/index.d.ts +1 -0
  308. package/dist/wallet/index.mjs +1 -0
  309. package/dist/wallet/types.cjs +1 -0
  310. package/dist/wallet/types.d.ts +4 -0
  311. package/dist/wallet/types.mjs +0 -0
  312. package/package.json +13 -13
  313. package/dist/index.js +0 -7426
  314. package/dist/index.js.map +0 -1
  315. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,543 @@
1
+ import { NetworkName } from "../constants.mjs";
2
+ import { LibraryError } from "../provider/errors.mjs";
3
+ import {
4
+ BlockTag,
5
+ TransactionType
6
+ } from "../types/index.mjs";
7
+ import { RPCSPEC06 as RPC } from "../types/api/index.mjs";
8
+ import { CallData } from "../utils/calldata/index.mjs";
9
+ import { isSierra } from "../utils/contract.mjs";
10
+ import { validateAndParseEthAddress } from "../utils/eth.mjs";
11
+ import fetch from "../utils/fetchPonyfill.mjs";
12
+ import { getSelector, getSelectorFromName } from "../utils/hash/index.mjs";
13
+ import { stringify } from "../utils/json.mjs";
14
+ import { getHexStringArray, toHex, toStorageKey } from "../utils/num.mjs";
15
+ import { Block, getDefaultNodeUrl, isV3Tx, isVersion, wait } from "../utils/provider.mjs";
16
+ import { decompressProgram, signatureToHexArray } from "../utils/stark.mjs";
17
+ import { getVersionsByType } from "../utils/transaction.mjs";
18
+ const defaultOptions = {
19
+ headers: { "Content-Type": "application/json" },
20
+ blockIdentifier: BlockTag.PENDING,
21
+ retries: 200
22
+ };
23
+ export class RpcChannel {
24
+ nodeUrl;
25
+ headers;
26
+ retries;
27
+ requestId;
28
+ blockIdentifier;
29
+ chainId;
30
+ specVersion;
31
+ waitMode;
32
+ // behave like web2 rpc and return when tx is processed
33
+ constructor(optionsOrProvider) {
34
+ const { nodeUrl, retries, headers, blockIdentifier, chainId, specVersion, waitMode } = optionsOrProvider || {};
35
+ if (Object.values(NetworkName).includes(nodeUrl)) {
36
+ this.nodeUrl = getDefaultNodeUrl(nodeUrl, optionsOrProvider?.default);
37
+ } else if (nodeUrl) {
38
+ this.nodeUrl = nodeUrl;
39
+ } else {
40
+ this.nodeUrl = getDefaultNodeUrl(void 0, optionsOrProvider?.default);
41
+ }
42
+ this.retries = retries || defaultOptions.retries;
43
+ this.headers = { ...defaultOptions.headers, ...headers };
44
+ this.blockIdentifier = blockIdentifier || defaultOptions.blockIdentifier;
45
+ this.chainId = chainId;
46
+ this.specVersion = specVersion;
47
+ this.waitMode = waitMode || false;
48
+ this.requestId = 0;
49
+ }
50
+ setChainId(chainId) {
51
+ this.chainId = chainId;
52
+ }
53
+ fetch(method, params, id = 0) {
54
+ const rpcRequestBody = {
55
+ id,
56
+ jsonrpc: "2.0",
57
+ method,
58
+ ...params && { params }
59
+ };
60
+ return fetch(this.nodeUrl, {
61
+ method: "POST",
62
+ body: stringify(rpcRequestBody),
63
+ headers: this.headers
64
+ });
65
+ }
66
+ errorHandler(method, params, rpcError, otherError) {
67
+ if (rpcError) {
68
+ const { code, message, data } = rpcError;
69
+ throw new LibraryError(
70
+ `RPC: ${method} with params ${stringify(params, null, 2)}
71
+
72
+ ${code}: ${message}: ${stringify(data)}`
73
+ );
74
+ }
75
+ if (otherError instanceof LibraryError) {
76
+ throw otherError;
77
+ }
78
+ if (otherError) {
79
+ throw Error(otherError.message);
80
+ }
81
+ }
82
+ async fetchEndpoint(method, params) {
83
+ try {
84
+ const rawResult = await this.fetch(method, params, this.requestId += 1);
85
+ const { error, result } = await rawResult.json();
86
+ this.errorHandler(method, params, error);
87
+ return result;
88
+ } catch (error) {
89
+ this.errorHandler(method, params, error?.response?.data, error);
90
+ throw error;
91
+ }
92
+ }
93
+ async getChainId() {
94
+ this.chainId ??= await this.fetchEndpoint("starknet_chainId");
95
+ return this.chainId;
96
+ }
97
+ async getSpecVersion() {
98
+ this.specVersion ??= await this.fetchEndpoint("starknet_specVersion");
99
+ return this.specVersion;
100
+ }
101
+ getNonceForAddress(contractAddress, blockIdentifier = this.blockIdentifier) {
102
+ const contract_address = toHex(contractAddress);
103
+ const block_id = new Block(blockIdentifier).identifier;
104
+ return this.fetchEndpoint("starknet_getNonce", {
105
+ contract_address,
106
+ block_id
107
+ });
108
+ }
109
+ /**
110
+ * Get the most recent accepted block hash and number
111
+ */
112
+ getBlockLatestAccepted() {
113
+ return this.fetchEndpoint("starknet_blockHashAndNumber");
114
+ }
115
+ /**
116
+ * Get the most recent accepted block number
117
+ * redundant use getBlockLatestAccepted();
118
+ * @returns Number of the latest block
119
+ */
120
+ getBlockNumber() {
121
+ return this.fetchEndpoint("starknet_blockNumber");
122
+ }
123
+ getBlockWithTxHashes(blockIdentifier = this.blockIdentifier) {
124
+ const block_id = new Block(blockIdentifier).identifier;
125
+ return this.fetchEndpoint("starknet_getBlockWithTxHashes", { block_id });
126
+ }
127
+ getBlockWithTxs(blockIdentifier = this.blockIdentifier) {
128
+ const block_id = new Block(blockIdentifier).identifier;
129
+ return this.fetchEndpoint("starknet_getBlockWithTxs", { block_id });
130
+ }
131
+ getBlockStateUpdate(blockIdentifier = this.blockIdentifier) {
132
+ const block_id = new Block(blockIdentifier).identifier;
133
+ return this.fetchEndpoint("starknet_getStateUpdate", { block_id });
134
+ }
135
+ getBlockTransactionsTraces(blockIdentifier = this.blockIdentifier) {
136
+ const block_id = new Block(blockIdentifier).identifier;
137
+ return this.fetchEndpoint("starknet_traceBlockTransactions", { block_id });
138
+ }
139
+ getBlockTransactionCount(blockIdentifier = this.blockIdentifier) {
140
+ const block_id = new Block(blockIdentifier).identifier;
141
+ return this.fetchEndpoint("starknet_getBlockTransactionCount", { block_id });
142
+ }
143
+ getTransactionByHash(txHash) {
144
+ const transaction_hash = toHex(txHash);
145
+ return this.fetchEndpoint("starknet_getTransactionByHash", {
146
+ transaction_hash
147
+ });
148
+ }
149
+ getTransactionByBlockIdAndIndex(blockIdentifier, index) {
150
+ const block_id = new Block(blockIdentifier).identifier;
151
+ return this.fetchEndpoint("starknet_getTransactionByBlockIdAndIndex", { block_id, index });
152
+ }
153
+ getTransactionReceipt(txHash) {
154
+ const transaction_hash = toHex(txHash);
155
+ return this.fetchEndpoint("starknet_getTransactionReceipt", { transaction_hash });
156
+ }
157
+ getTransactionTrace(txHash) {
158
+ const transaction_hash = toHex(txHash);
159
+ return this.fetchEndpoint("starknet_traceTransaction", { transaction_hash });
160
+ }
161
+ /**
162
+ * Get the status of a transaction
163
+ */
164
+ getTransactionStatus(transactionHash) {
165
+ const transaction_hash = toHex(transactionHash);
166
+ return this.fetchEndpoint("starknet_getTransactionStatus", { transaction_hash });
167
+ }
168
+ /**
169
+ * @param invocations AccountInvocations
170
+ * @param simulateTransactionOptions blockIdentifier and flags to skip validation and fee charge<br/>
171
+ * - blockIdentifier<br/>
172
+ * - skipValidate (default false)<br/>
173
+ * - skipFeeCharge (default true)<br/>
174
+ */
175
+ simulateTransaction(invocations, simulateTransactionOptions = {}) {
176
+ const {
177
+ blockIdentifier = this.blockIdentifier,
178
+ skipValidate = true,
179
+ skipFeeCharge = true
180
+ } = simulateTransactionOptions;
181
+ const block_id = new Block(blockIdentifier).identifier;
182
+ const simulationFlags = [];
183
+ if (skipValidate) simulationFlags.push(RPC.ESimulationFlag.SKIP_VALIDATE);
184
+ if (skipFeeCharge) simulationFlags.push(RPC.ESimulationFlag.SKIP_FEE_CHARGE);
185
+ return this.fetchEndpoint("starknet_simulateTransactions", {
186
+ block_id,
187
+ transactions: invocations.map((it) => this.buildTransaction(it)),
188
+ simulation_flags: simulationFlags
189
+ });
190
+ }
191
+ async waitForTransaction(txHash, options) {
192
+ const transactionHash = toHex(txHash);
193
+ let { retries } = this;
194
+ let onchain = false;
195
+ let isErrorState = false;
196
+ const retryInterval = options?.retryInterval ?? 5e3;
197
+ const errorStates = options?.errorStates ?? [
198
+ RPC.ETransactionStatus.REJECTED
199
+ // TODO: commented out to preserve the long-standing behavior of "reverted" not being treated as an error by default
200
+ // should decide which behavior to keep in the future
201
+ // RPC.ETransactionExecutionStatus.REVERTED,
202
+ ];
203
+ const successStates = options?.successStates ?? [
204
+ RPC.ETransactionExecutionStatus.SUCCEEDED,
205
+ RPC.ETransactionStatus.ACCEPTED_ON_L2,
206
+ RPC.ETransactionStatus.ACCEPTED_ON_L1
207
+ ];
208
+ let txStatus;
209
+ while (!onchain) {
210
+ await wait(retryInterval);
211
+ try {
212
+ txStatus = await this.getTransactionStatus(transactionHash);
213
+ const executionStatus = txStatus.execution_status;
214
+ const finalityStatus = txStatus.finality_status;
215
+ if (!finalityStatus) {
216
+ const error = new Error("waiting for transaction status");
217
+ throw error;
218
+ }
219
+ if (errorStates.includes(executionStatus) || errorStates.includes(finalityStatus)) {
220
+ const message = `${executionStatus}: ${finalityStatus}`;
221
+ const error = new Error(message);
222
+ error.response = txStatus;
223
+ isErrorState = true;
224
+ throw error;
225
+ } else if (successStates.includes(executionStatus) || successStates.includes(finalityStatus)) {
226
+ onchain = true;
227
+ }
228
+ } catch (error) {
229
+ if (error instanceof Error && isErrorState) {
230
+ throw error;
231
+ }
232
+ if (retries <= 0) {
233
+ throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);
234
+ }
235
+ }
236
+ retries -= 1;
237
+ }
238
+ let txReceipt = null;
239
+ while (txReceipt === null) {
240
+ try {
241
+ txReceipt = await this.getTransactionReceipt(transactionHash);
242
+ } catch (error) {
243
+ if (retries <= 0) {
244
+ throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);
245
+ }
246
+ }
247
+ retries -= 1;
248
+ await wait(retryInterval);
249
+ }
250
+ return txReceipt;
251
+ }
252
+ getStorageAt(contractAddress, key, blockIdentifier = this.blockIdentifier) {
253
+ const contract_address = toHex(contractAddress);
254
+ const parsedKey = toStorageKey(key);
255
+ const block_id = new Block(blockIdentifier).identifier;
256
+ return this.fetchEndpoint("starknet_getStorageAt", {
257
+ contract_address,
258
+ key: parsedKey,
259
+ block_id
260
+ });
261
+ }
262
+ getClassHashAt(contractAddress, blockIdentifier = this.blockIdentifier) {
263
+ const contract_address = toHex(contractAddress);
264
+ const block_id = new Block(blockIdentifier).identifier;
265
+ return this.fetchEndpoint("starknet_getClassHashAt", {
266
+ block_id,
267
+ contract_address
268
+ });
269
+ }
270
+ getClass(classHash, blockIdentifier = this.blockIdentifier) {
271
+ const class_hash = toHex(classHash);
272
+ const block_id = new Block(blockIdentifier).identifier;
273
+ return this.fetchEndpoint("starknet_getClass", {
274
+ class_hash,
275
+ block_id
276
+ });
277
+ }
278
+ getClassAt(contractAddress, blockIdentifier = this.blockIdentifier) {
279
+ const contract_address = toHex(contractAddress);
280
+ const block_id = new Block(blockIdentifier).identifier;
281
+ return this.fetchEndpoint("starknet_getClassAt", {
282
+ block_id,
283
+ contract_address
284
+ });
285
+ }
286
+ async getEstimateFee(invocations, { blockIdentifier = this.blockIdentifier, skipValidate = true }) {
287
+ const block_id = new Block(blockIdentifier).identifier;
288
+ let flags = {};
289
+ if (!isVersion("0.5", await this.getSpecVersion())) {
290
+ flags = {
291
+ simulation_flags: skipValidate ? [RPC.ESimulationFlag.SKIP_VALIDATE] : []
292
+ };
293
+ }
294
+ return this.fetchEndpoint("starknet_estimateFee", {
295
+ request: invocations.map((it) => this.buildTransaction(it, "fee")),
296
+ block_id,
297
+ ...flags
298
+ });
299
+ }
300
+ async invoke(functionInvocation, details) {
301
+ let promise;
302
+ if (!isV3Tx(details)) {
303
+ promise = this.fetchEndpoint("starknet_addInvokeTransaction", {
304
+ invoke_transaction: {
305
+ sender_address: functionInvocation.contractAddress,
306
+ calldata: CallData.toHex(functionInvocation.calldata),
307
+ type: RPC.ETransactionType.INVOKE,
308
+ max_fee: toHex(details.maxFee || 0),
309
+ version: RPC.ETransactionVersion.V1,
310
+ signature: signatureToHexArray(functionInvocation.signature),
311
+ nonce: toHex(details.nonce)
312
+ }
313
+ });
314
+ } else {
315
+ promise = this.fetchEndpoint("starknet_addInvokeTransaction", {
316
+ invoke_transaction: {
317
+ type: RPC.ETransactionType.INVOKE,
318
+ sender_address: functionInvocation.contractAddress,
319
+ calldata: CallData.toHex(functionInvocation.calldata),
320
+ version: RPC.ETransactionVersion.V3,
321
+ signature: signatureToHexArray(functionInvocation.signature),
322
+ nonce: toHex(details.nonce),
323
+ resource_bounds: details.resourceBounds,
324
+ tip: toHex(details.tip),
325
+ paymaster_data: details.paymasterData.map((it) => toHex(it)),
326
+ account_deployment_data: details.accountDeploymentData.map((it) => toHex(it)),
327
+ nonce_data_availability_mode: details.nonceDataAvailabilityMode,
328
+ fee_data_availability_mode: details.feeDataAvailabilityMode
329
+ }
330
+ });
331
+ }
332
+ return this.waitMode ? this.waitForTransaction((await promise).transaction_hash) : promise;
333
+ }
334
+ async declare({ contract, signature, senderAddress, compiledClassHash }, details) {
335
+ let promise;
336
+ if (!isSierra(contract) && !isV3Tx(details)) {
337
+ promise = this.fetchEndpoint("starknet_addDeclareTransaction", {
338
+ declare_transaction: {
339
+ type: RPC.ETransactionType.DECLARE,
340
+ contract_class: {
341
+ program: contract.program,
342
+ entry_points_by_type: contract.entry_points_by_type,
343
+ abi: contract.abi
344
+ },
345
+ version: RPC.ETransactionVersion.V1,
346
+ max_fee: toHex(details.maxFee || 0),
347
+ signature: signatureToHexArray(signature),
348
+ sender_address: senderAddress,
349
+ nonce: toHex(details.nonce)
350
+ }
351
+ });
352
+ } else if (isSierra(contract) && !isV3Tx(details)) {
353
+ promise = this.fetchEndpoint("starknet_addDeclareTransaction", {
354
+ declare_transaction: {
355
+ type: RPC.ETransactionType.DECLARE,
356
+ contract_class: {
357
+ sierra_program: decompressProgram(contract.sierra_program),
358
+ contract_class_version: contract.contract_class_version,
359
+ entry_points_by_type: contract.entry_points_by_type,
360
+ abi: contract.abi
361
+ },
362
+ compiled_class_hash: compiledClassHash || "",
363
+ version: RPC.ETransactionVersion.V2,
364
+ max_fee: toHex(details.maxFee || 0),
365
+ signature: signatureToHexArray(signature),
366
+ sender_address: senderAddress,
367
+ nonce: toHex(details.nonce)
368
+ }
369
+ });
370
+ } else if (isSierra(contract) && isV3Tx(details)) {
371
+ promise = this.fetchEndpoint("starknet_addDeclareTransaction", {
372
+ declare_transaction: {
373
+ type: RPC.ETransactionType.DECLARE,
374
+ sender_address: senderAddress,
375
+ compiled_class_hash: compiledClassHash || "",
376
+ version: RPC.ETransactionVersion.V3,
377
+ signature: signatureToHexArray(signature),
378
+ nonce: toHex(details.nonce),
379
+ contract_class: {
380
+ sierra_program: decompressProgram(contract.sierra_program),
381
+ contract_class_version: contract.contract_class_version,
382
+ entry_points_by_type: contract.entry_points_by_type,
383
+ abi: contract.abi
384
+ },
385
+ resource_bounds: details.resourceBounds,
386
+ tip: toHex(details.tip),
387
+ paymaster_data: details.paymasterData.map((it) => toHex(it)),
388
+ account_deployment_data: details.accountDeploymentData.map((it) => toHex(it)),
389
+ nonce_data_availability_mode: details.nonceDataAvailabilityMode,
390
+ fee_data_availability_mode: details.feeDataAvailabilityMode
391
+ }
392
+ });
393
+ } else {
394
+ throw Error("declare unspotted parameters");
395
+ }
396
+ return this.waitMode ? this.waitForTransaction((await promise).transaction_hash) : promise;
397
+ }
398
+ async deployAccount({ classHash, constructorCalldata, addressSalt, signature }, details) {
399
+ let promise;
400
+ if (!isV3Tx(details)) {
401
+ promise = this.fetchEndpoint("starknet_addDeployAccountTransaction", {
402
+ deploy_account_transaction: {
403
+ constructor_calldata: CallData.toHex(constructorCalldata || []),
404
+ class_hash: toHex(classHash),
405
+ contract_address_salt: toHex(addressSalt || 0),
406
+ type: RPC.ETransactionType.DEPLOY_ACCOUNT,
407
+ max_fee: toHex(details.maxFee || 0),
408
+ version: RPC.ETransactionVersion.V1,
409
+ signature: signatureToHexArray(signature),
410
+ nonce: toHex(details.nonce)
411
+ }
412
+ });
413
+ } else {
414
+ promise = this.fetchEndpoint("starknet_addDeployAccountTransaction", {
415
+ deploy_account_transaction: {
416
+ type: RPC.ETransactionType.DEPLOY_ACCOUNT,
417
+ version: RPC.ETransactionVersion.V3,
418
+ signature: signatureToHexArray(signature),
419
+ nonce: toHex(details.nonce),
420
+ contract_address_salt: toHex(addressSalt || 0),
421
+ constructor_calldata: CallData.toHex(constructorCalldata || []),
422
+ class_hash: toHex(classHash),
423
+ resource_bounds: details.resourceBounds,
424
+ tip: toHex(details.tip),
425
+ paymaster_data: details.paymasterData.map((it) => toHex(it)),
426
+ nonce_data_availability_mode: details.nonceDataAvailabilityMode,
427
+ fee_data_availability_mode: details.feeDataAvailabilityMode
428
+ }
429
+ });
430
+ }
431
+ return this.waitMode ? this.waitForTransaction((await promise).transaction_hash) : promise;
432
+ }
433
+ callContract(call, blockIdentifier = this.blockIdentifier) {
434
+ const block_id = new Block(blockIdentifier).identifier;
435
+ return this.fetchEndpoint("starknet_call", {
436
+ request: {
437
+ contract_address: call.contractAddress,
438
+ entry_point_selector: getSelectorFromName(call.entrypoint),
439
+ calldata: CallData.toHex(call.calldata)
440
+ },
441
+ block_id
442
+ });
443
+ }
444
+ /**
445
+ * NEW: Estimate the fee for a message from L1
446
+ * @param message Message From L1
447
+ */
448
+ estimateMessageFee(message, blockIdentifier = this.blockIdentifier) {
449
+ const { from_address, to_address, entry_point_selector, payload } = message;
450
+ const formattedMessage = {
451
+ from_address: validateAndParseEthAddress(from_address),
452
+ to_address: toHex(to_address),
453
+ entry_point_selector: getSelector(entry_point_selector),
454
+ payload: getHexStringArray(payload)
455
+ };
456
+ const block_id = new Block(blockIdentifier).identifier;
457
+ return this.fetchEndpoint("starknet_estimateMessageFee", {
458
+ message: formattedMessage,
459
+ block_id
460
+ });
461
+ }
462
+ /**
463
+ * Returns an object about the sync status, or false if the node is not synching
464
+ * @returns Object with the stats data
465
+ */
466
+ getSyncingStats() {
467
+ return this.fetchEndpoint("starknet_syncing");
468
+ }
469
+ /**
470
+ * Returns all events matching the given filter
471
+ * @returns events and the pagination of the events
472
+ */
473
+ getEvents(eventFilter) {
474
+ return this.fetchEndpoint("starknet_getEvents", { filter: eventFilter });
475
+ }
476
+ buildTransaction(invocation, versionType) {
477
+ const defaultVersions = getVersionsByType(versionType);
478
+ let details;
479
+ if (!isV3Tx(invocation)) {
480
+ details = {
481
+ signature: signatureToHexArray(invocation.signature),
482
+ nonce: toHex(invocation.nonce),
483
+ max_fee: toHex(invocation.maxFee || 0)
484
+ };
485
+ } else {
486
+ details = {
487
+ signature: signatureToHexArray(invocation.signature),
488
+ nonce: toHex(invocation.nonce),
489
+ resource_bounds: invocation.resourceBounds,
490
+ tip: toHex(invocation.tip),
491
+ paymaster_data: invocation.paymasterData.map((it) => toHex(it)),
492
+ nonce_data_availability_mode: invocation.nonceDataAvailabilityMode,
493
+ fee_data_availability_mode: invocation.feeDataAvailabilityMode,
494
+ account_deployment_data: invocation.accountDeploymentData.map((it) => toHex(it))
495
+ };
496
+ }
497
+ if (invocation.type === TransactionType.INVOKE) {
498
+ return {
499
+ // v0 v1 v3
500
+ type: RPC.ETransactionType.INVOKE,
501
+ sender_address: invocation.contractAddress,
502
+ calldata: CallData.toHex(invocation.calldata),
503
+ version: toHex(invocation.version || defaultVersions.v3),
504
+ ...details
505
+ };
506
+ }
507
+ if (invocation.type === TransactionType.DECLARE) {
508
+ if (!isSierra(invocation.contract)) {
509
+ return {
510
+ type: invocation.type,
511
+ contract_class: invocation.contract,
512
+ sender_address: invocation.senderAddress,
513
+ version: toHex(invocation.version || defaultVersions.v1),
514
+ ...details
515
+ };
516
+ }
517
+ return {
518
+ // Cairo 1 - v2 v3
519
+ type: invocation.type,
520
+ contract_class: {
521
+ ...invocation.contract,
522
+ sierra_program: decompressProgram(invocation.contract.sierra_program)
523
+ },
524
+ compiled_class_hash: invocation.compiledClassHash || "",
525
+ sender_address: invocation.senderAddress,
526
+ version: toHex(invocation.version || defaultVersions.v3),
527
+ ...details
528
+ };
529
+ }
530
+ if (invocation.type === TransactionType.DEPLOY_ACCOUNT) {
531
+ const { account_deployment_data, ...restDetails } = details;
532
+ return {
533
+ type: invocation.type,
534
+ constructor_calldata: CallData.toHex(invocation.constructorCalldata || []),
535
+ class_hash: toHex(invocation.classHash),
536
+ contract_address_salt: toHex(invocation.addressSalt || 0),
537
+ version: toHex(invocation.version || defaultVersions.v3),
538
+ ...restDetails
539
+ };
540
+ }
541
+ throw Error("RPC buildTransaction received unknown TransactionType");
542
+ }
543
+ }