@stellar/stellar-sdk 16.0.1 → 16.2.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 (310) hide show
  1. package/README.md +41 -2
  2. package/dist/stellar-sdk-axios.js +5401 -3690
  3. package/dist/stellar-sdk-axios.js.map +1 -1
  4. package/dist/stellar-sdk-axios.min.js +12 -11
  5. package/dist/stellar-sdk-axios.min.js.map +1 -1
  6. package/dist/stellar-sdk.js +4850 -3681
  7. package/dist/stellar-sdk.js.map +1 -1
  8. package/dist/stellar-sdk.min.js +17 -17
  9. package/dist/stellar-sdk.min.js.map +1 -1
  10. package/lib/axios/cjs/base/auth.js +147 -30
  11. package/lib/axios/cjs/base/auth.js.map +1 -1
  12. package/lib/axios/cjs/base/index.js +113 -0
  13. package/lib/axios/cjs/base/index.js.map +1 -0
  14. package/lib/axios/cjs/base/keypair.js +39 -0
  15. package/lib/axios/cjs/base/keypair.js.map +1 -1
  16. package/lib/axios/cjs/base/scval.js +34 -0
  17. package/lib/axios/cjs/base/scval.js.map +1 -1
  18. package/lib/axios/cjs/bindings/client.js +170 -0
  19. package/lib/axios/cjs/bindings/client.js.map +1 -1
  20. package/lib/axios/cjs/bindings/config.js +1 -1
  21. package/lib/axios/cjs/bindings/generator.js +45 -16
  22. package/lib/axios/cjs/bindings/generator.js.map +1 -1
  23. package/lib/axios/cjs/bindings/types.js +151 -1
  24. package/lib/axios/cjs/bindings/types.js.map +1 -1
  25. package/lib/axios/cjs/bindings/utils.js +10 -0
  26. package/lib/axios/cjs/bindings/utils.js.map +1 -1
  27. package/lib/axios/cjs/cli/index.js +19 -22
  28. package/lib/axios/cjs/cli/index.js.map +1 -1
  29. package/lib/axios/cjs/cli/util.js +1 -20
  30. package/lib/axios/cjs/cli/util.js.map +1 -1
  31. package/lib/axios/cjs/contract/assembled_transaction.js +39 -17
  32. package/lib/axios/cjs/contract/assembled_transaction.js.map +1 -1
  33. package/lib/axios/cjs/contract/basic_node_signer.js +8 -42
  34. package/lib/axios/cjs/contract/basic_node_signer.js.map +1 -1
  35. package/lib/axios/cjs/contract/client.js +56 -3
  36. package/lib/axios/cjs/contract/client.js.map +1 -1
  37. package/lib/axios/cjs/contract/event_spec.js +164 -0
  38. package/lib/axios/cjs/contract/event_spec.js.map +1 -0
  39. package/lib/axios/cjs/contract/index.js +2 -0
  40. package/lib/axios/cjs/contract/index.js.map +1 -1
  41. package/lib/axios/cjs/contract/sent_transaction.js +0 -20
  42. package/lib/axios/cjs/contract/sent_transaction.js.map +1 -1
  43. package/lib/axios/cjs/contract/signer.js +96 -0
  44. package/lib/axios/cjs/contract/signer.js.map +1 -0
  45. package/lib/axios/cjs/contract/spec.js +107 -3
  46. package/lib/axios/cjs/contract/spec.js.map +1 -1
  47. package/lib/axios/cjs/contract/types.js.map +1 -1
  48. package/lib/axios/cjs/errors/transaction_failed.js +62 -0
  49. package/lib/axios/cjs/errors/transaction_failed.js.map +1 -0
  50. package/lib/axios/cjs/errors/wrap_http_error.js +20 -0
  51. package/lib/axios/cjs/errors/wrap_http_error.js.map +1 -0
  52. package/lib/axios/cjs/federation/server.js +15 -35
  53. package/lib/axios/cjs/federation/server.js.map +1 -1
  54. package/lib/axios/cjs/horizon/account_response.js +0 -20
  55. package/lib/axios/cjs/horizon/account_response.js.map +1 -1
  56. package/lib/axios/cjs/horizon/horizon_api.js +5 -0
  57. package/lib/axios/cjs/horizon/horizon_api.js.map +1 -1
  58. package/lib/axios/cjs/horizon/horizon_axios_client.js +1 -1
  59. package/lib/axios/cjs/horizon/server.js +20 -26
  60. package/lib/axios/cjs/horizon/server.js.map +1 -1
  61. package/lib/axios/cjs/index.js +66 -65
  62. package/lib/axios/cjs/index.js.map +1 -1
  63. package/lib/axios/cjs/rpc/api.js.map +1 -1
  64. package/lib/axios/cjs/rpc/axios.js +1 -1
  65. package/lib/axios/cjs/rpc/server.js +181 -13
  66. package/lib/axios/cjs/rpc/server.js.map +1 -1
  67. package/lib/axios/cjs/rpc/transaction.js +2 -20
  68. package/lib/axios/cjs/rpc/transaction.js.map +1 -1
  69. package/lib/axios/cjs/webauth/challenge_transaction.js +7 -22
  70. package/lib/axios/cjs/webauth/challenge_transaction.js.map +1 -1
  71. package/lib/axios/cjs/webauth/utils.js +1 -20
  72. package/lib/axios/cjs/webauth/utils.js.map +1 -1
  73. package/lib/axios/esm/base/auth.d.ts +181 -13
  74. package/lib/axios/esm/base/auth.js +146 -31
  75. package/lib/axios/esm/base/auth.js.map +1 -1
  76. package/lib/axios/esm/base/index.d.ts +2 -2
  77. package/lib/axios/esm/base/index.js +44 -0
  78. package/lib/axios/esm/base/index.js.map +1 -0
  79. package/lib/axios/esm/base/keypair.d.ts +27 -0
  80. package/lib/axios/esm/base/keypair.js +39 -0
  81. package/lib/axios/esm/base/keypair.js.map +1 -1
  82. package/lib/axios/esm/base/scval.d.ts +4 -0
  83. package/lib/axios/esm/base/scval.js +34 -0
  84. package/lib/axios/esm/base/scval.js.map +1 -1
  85. package/lib/axios/esm/bindings/client.d.ts +39 -0
  86. package/lib/axios/esm/bindings/client.js +171 -1
  87. package/lib/axios/esm/bindings/client.js.map +1 -1
  88. package/lib/axios/esm/bindings/config.js +1 -1
  89. package/lib/axios/esm/bindings/generator.d.ts +34 -0
  90. package/lib/axios/esm/bindings/generator.js +45 -16
  91. package/lib/axios/esm/bindings/generator.js.map +1 -1
  92. package/lib/axios/esm/bindings/types.d.ts +42 -0
  93. package/lib/axios/esm/bindings/types.js +153 -3
  94. package/lib/axios/esm/bindings/types.js.map +1 -1
  95. package/lib/axios/esm/bindings/utils.d.ts +10 -0
  96. package/lib/axios/esm/bindings/utils.js +9 -1
  97. package/lib/axios/esm/bindings/utils.js.map +1 -1
  98. package/lib/axios/esm/cli/index.js +19 -22
  99. package/lib/axios/esm/cli/index.js.map +1 -1
  100. package/lib/axios/esm/cli/util.d.ts +1 -1
  101. package/lib/axios/esm/cli/util.js +1 -20
  102. package/lib/axios/esm/cli/util.js.map +1 -1
  103. package/lib/axios/esm/contract/assembled_transaction.d.ts +7 -5
  104. package/lib/axios/esm/contract/assembled_transaction.js +39 -17
  105. package/lib/axios/esm/contract/assembled_transaction.js.map +1 -1
  106. package/lib/axios/esm/contract/basic_node_signer.d.ts +3 -0
  107. package/lib/axios/esm/contract/basic_node_signer.js +8 -42
  108. package/lib/axios/esm/contract/basic_node_signer.js.map +1 -1
  109. package/lib/axios/esm/contract/client.d.ts +49 -3
  110. package/lib/axios/esm/contract/client.js +56 -3
  111. package/lib/axios/esm/contract/client.js.map +1 -1
  112. package/lib/axios/esm/contract/event_spec.d.ts +78 -0
  113. package/lib/axios/esm/contract/event_spec.js +159 -0
  114. package/lib/axios/esm/contract/event_spec.js.map +1 -0
  115. package/lib/axios/esm/contract/index.d.ts +3 -0
  116. package/lib/axios/esm/contract/index.js +1 -0
  117. package/lib/axios/esm/contract/index.js.map +1 -1
  118. package/lib/axios/esm/contract/sent_transaction.js +0 -20
  119. package/lib/axios/esm/contract/sent_transaction.js.map +1 -1
  120. package/lib/axios/esm/contract/signer.d.ts +104 -0
  121. package/lib/axios/esm/contract/signer.js +91 -0
  122. package/lib/axios/esm/contract/signer.js.map +1 -0
  123. package/lib/axios/esm/contract/spec.d.ts +84 -0
  124. package/lib/axios/esm/contract/spec.js +107 -3
  125. package/lib/axios/esm/contract/spec.js.map +1 -1
  126. package/lib/axios/esm/contract/types.d.ts +25 -8
  127. package/lib/axios/esm/contract/types.js.map +1 -1
  128. package/lib/axios/esm/errors/index.d.ts +1 -0
  129. package/lib/axios/esm/errors/transaction_failed.d.ts +55 -0
  130. package/lib/axios/esm/errors/transaction_failed.js +60 -0
  131. package/lib/axios/esm/errors/transaction_failed.js.map +1 -0
  132. package/lib/axios/esm/errors/wrap_http_error.d.ts +20 -0
  133. package/lib/axios/esm/errors/wrap_http_error.js +18 -0
  134. package/lib/axios/esm/errors/wrap_http_error.js.map +1 -0
  135. package/lib/axios/esm/federation/server.js +15 -35
  136. package/lib/axios/esm/federation/server.js.map +1 -1
  137. package/lib/axios/esm/horizon/account_response.js +0 -20
  138. package/lib/axios/esm/horizon/account_response.js.map +1 -1
  139. package/lib/axios/esm/horizon/horizon_api.d.ts +12 -1
  140. package/lib/axios/esm/horizon/horizon_api.js +5 -0
  141. package/lib/axios/esm/horizon/horizon_api.js.map +1 -1
  142. package/lib/axios/esm/horizon/horizon_axios_client.js +1 -1
  143. package/lib/axios/esm/horizon/server.d.ts +10 -4
  144. package/lib/axios/esm/horizon/server.js +20 -26
  145. package/lib/axios/esm/horizon/server.js.map +1 -1
  146. package/lib/axios/esm/index.js +27 -29
  147. package/lib/axios/esm/index.js.map +1 -1
  148. package/lib/axios/esm/rpc/api.d.ts +21 -0
  149. package/lib/axios/esm/rpc/api.js.map +1 -1
  150. package/lib/axios/esm/rpc/axios.js +1 -1
  151. package/lib/axios/esm/rpc/server.d.ts +115 -3
  152. package/lib/axios/esm/rpc/server.js +181 -13
  153. package/lib/axios/esm/rpc/server.js.map +1 -1
  154. package/lib/axios/esm/rpc/transaction.js +2 -20
  155. package/lib/axios/esm/rpc/transaction.js.map +1 -1
  156. package/lib/axios/esm/webauth/challenge_transaction.js +7 -22
  157. package/lib/axios/esm/webauth/challenge_transaction.js.map +1 -1
  158. package/lib/axios/esm/webauth/utils.js +1 -20
  159. package/lib/axios/esm/webauth/utils.js.map +1 -1
  160. package/lib/cjs/base/auth.js +147 -30
  161. package/lib/cjs/base/auth.js.map +1 -1
  162. package/lib/cjs/base/index.js +113 -0
  163. package/lib/cjs/base/index.js.map +1 -0
  164. package/lib/cjs/base/keypair.js +39 -0
  165. package/lib/cjs/base/keypair.js.map +1 -1
  166. package/lib/cjs/base/scval.js +34 -0
  167. package/lib/cjs/base/scval.js.map +1 -1
  168. package/lib/cjs/bindings/client.js +170 -0
  169. package/lib/cjs/bindings/client.js.map +1 -1
  170. package/lib/cjs/bindings/config.js +1 -1
  171. package/lib/cjs/bindings/generator.js +45 -16
  172. package/lib/cjs/bindings/generator.js.map +1 -1
  173. package/lib/cjs/bindings/types.js +151 -1
  174. package/lib/cjs/bindings/types.js.map +1 -1
  175. package/lib/cjs/bindings/utils.js +10 -0
  176. package/lib/cjs/bindings/utils.js.map +1 -1
  177. package/lib/cjs/cli/index.js +19 -22
  178. package/lib/cjs/cli/index.js.map +1 -1
  179. package/lib/cjs/cli/util.js +1 -20
  180. package/lib/cjs/cli/util.js.map +1 -1
  181. package/lib/cjs/contract/assembled_transaction.js +39 -17
  182. package/lib/cjs/contract/assembled_transaction.js.map +1 -1
  183. package/lib/cjs/contract/basic_node_signer.js +8 -42
  184. package/lib/cjs/contract/basic_node_signer.js.map +1 -1
  185. package/lib/cjs/contract/client.js +56 -3
  186. package/lib/cjs/contract/client.js.map +1 -1
  187. package/lib/cjs/contract/event_spec.js +164 -0
  188. package/lib/cjs/contract/event_spec.js.map +1 -0
  189. package/lib/cjs/contract/index.js +2 -0
  190. package/lib/cjs/contract/index.js.map +1 -1
  191. package/lib/cjs/contract/sent_transaction.js +0 -20
  192. package/lib/cjs/contract/sent_transaction.js.map +1 -1
  193. package/lib/cjs/contract/signer.js +96 -0
  194. package/lib/cjs/contract/signer.js.map +1 -0
  195. package/lib/cjs/contract/spec.js +107 -3
  196. package/lib/cjs/contract/spec.js.map +1 -1
  197. package/lib/cjs/contract/types.js.map +1 -1
  198. package/lib/cjs/errors/transaction_failed.js +62 -0
  199. package/lib/cjs/errors/transaction_failed.js.map +1 -0
  200. package/lib/cjs/errors/wrap_http_error.js +20 -0
  201. package/lib/cjs/errors/wrap_http_error.js.map +1 -0
  202. package/lib/cjs/federation/server.js +15 -35
  203. package/lib/cjs/federation/server.js.map +1 -1
  204. package/lib/cjs/horizon/account_response.js +0 -20
  205. package/lib/cjs/horizon/account_response.js.map +1 -1
  206. package/lib/cjs/horizon/horizon_api.js +5 -0
  207. package/lib/cjs/horizon/horizon_api.js.map +1 -1
  208. package/lib/cjs/horizon/horizon_axios_client.js +1 -1
  209. package/lib/cjs/horizon/server.js +20 -26
  210. package/lib/cjs/horizon/server.js.map +1 -1
  211. package/lib/cjs/index.js +66 -65
  212. package/lib/cjs/index.js.map +1 -1
  213. package/lib/cjs/rpc/api.js.map +1 -1
  214. package/lib/cjs/rpc/axios.js +1 -1
  215. package/lib/cjs/rpc/server.js +181 -13
  216. package/lib/cjs/rpc/server.js.map +1 -1
  217. package/lib/cjs/rpc/transaction.js +2 -20
  218. package/lib/cjs/rpc/transaction.js.map +1 -1
  219. package/lib/cjs/webauth/challenge_transaction.js +7 -22
  220. package/lib/cjs/webauth/challenge_transaction.js.map +1 -1
  221. package/lib/cjs/webauth/utils.js +1 -20
  222. package/lib/cjs/webauth/utils.js.map +1 -1
  223. package/lib/esm/base/auth.d.ts +181 -13
  224. package/lib/esm/base/auth.js +146 -31
  225. package/lib/esm/base/auth.js.map +1 -1
  226. package/lib/esm/base/index.d.ts +2 -2
  227. package/lib/esm/base/index.js +44 -0
  228. package/lib/esm/base/index.js.map +1 -0
  229. package/lib/esm/base/keypair.d.ts +27 -0
  230. package/lib/esm/base/keypair.js +39 -0
  231. package/lib/esm/base/keypair.js.map +1 -1
  232. package/lib/esm/base/scval.d.ts +4 -0
  233. package/lib/esm/base/scval.js +34 -0
  234. package/lib/esm/base/scval.js.map +1 -1
  235. package/lib/esm/bindings/client.d.ts +39 -0
  236. package/lib/esm/bindings/client.js +171 -1
  237. package/lib/esm/bindings/client.js.map +1 -1
  238. package/lib/esm/bindings/config.js +1 -1
  239. package/lib/esm/bindings/generator.d.ts +34 -0
  240. package/lib/esm/bindings/generator.js +45 -16
  241. package/lib/esm/bindings/generator.js.map +1 -1
  242. package/lib/esm/bindings/types.d.ts +42 -0
  243. package/lib/esm/bindings/types.js +153 -3
  244. package/lib/esm/bindings/types.js.map +1 -1
  245. package/lib/esm/bindings/utils.d.ts +10 -0
  246. package/lib/esm/bindings/utils.js +9 -1
  247. package/lib/esm/bindings/utils.js.map +1 -1
  248. package/lib/esm/cli/index.js +19 -22
  249. package/lib/esm/cli/index.js.map +1 -1
  250. package/lib/esm/cli/util.d.ts +1 -1
  251. package/lib/esm/cli/util.js +1 -20
  252. package/lib/esm/cli/util.js.map +1 -1
  253. package/lib/esm/contract/assembled_transaction.d.ts +7 -5
  254. package/lib/esm/contract/assembled_transaction.js +39 -17
  255. package/lib/esm/contract/assembled_transaction.js.map +1 -1
  256. package/lib/esm/contract/basic_node_signer.d.ts +3 -0
  257. package/lib/esm/contract/basic_node_signer.js +8 -42
  258. package/lib/esm/contract/basic_node_signer.js.map +1 -1
  259. package/lib/esm/contract/client.d.ts +49 -3
  260. package/lib/esm/contract/client.js +56 -3
  261. package/lib/esm/contract/client.js.map +1 -1
  262. package/lib/esm/contract/event_spec.d.ts +78 -0
  263. package/lib/esm/contract/event_spec.js +159 -0
  264. package/lib/esm/contract/event_spec.js.map +1 -0
  265. package/lib/esm/contract/index.d.ts +3 -0
  266. package/lib/esm/contract/index.js +1 -0
  267. package/lib/esm/contract/index.js.map +1 -1
  268. package/lib/esm/contract/sent_transaction.js +0 -20
  269. package/lib/esm/contract/sent_transaction.js.map +1 -1
  270. package/lib/esm/contract/signer.d.ts +104 -0
  271. package/lib/esm/contract/signer.js +91 -0
  272. package/lib/esm/contract/signer.js.map +1 -0
  273. package/lib/esm/contract/spec.d.ts +84 -0
  274. package/lib/esm/contract/spec.js +107 -3
  275. package/lib/esm/contract/spec.js.map +1 -1
  276. package/lib/esm/contract/types.d.ts +25 -8
  277. package/lib/esm/contract/types.js.map +1 -1
  278. package/lib/esm/errors/index.d.ts +1 -0
  279. package/lib/esm/errors/transaction_failed.d.ts +55 -0
  280. package/lib/esm/errors/transaction_failed.js +60 -0
  281. package/lib/esm/errors/transaction_failed.js.map +1 -0
  282. package/lib/esm/errors/wrap_http_error.d.ts +20 -0
  283. package/lib/esm/errors/wrap_http_error.js +18 -0
  284. package/lib/esm/errors/wrap_http_error.js.map +1 -0
  285. package/lib/esm/federation/server.js +15 -35
  286. package/lib/esm/federation/server.js.map +1 -1
  287. package/lib/esm/horizon/account_response.js +0 -20
  288. package/lib/esm/horizon/account_response.js.map +1 -1
  289. package/lib/esm/horizon/horizon_api.d.ts +12 -1
  290. package/lib/esm/horizon/horizon_api.js +5 -0
  291. package/lib/esm/horizon/horizon_api.js.map +1 -1
  292. package/lib/esm/horizon/horizon_axios_client.js +1 -1
  293. package/lib/esm/horizon/server.d.ts +10 -4
  294. package/lib/esm/horizon/server.js +20 -26
  295. package/lib/esm/horizon/server.js.map +1 -1
  296. package/lib/esm/index.js +27 -29
  297. package/lib/esm/index.js.map +1 -1
  298. package/lib/esm/rpc/api.d.ts +21 -0
  299. package/lib/esm/rpc/api.js.map +1 -1
  300. package/lib/esm/rpc/axios.js +1 -1
  301. package/lib/esm/rpc/server.d.ts +115 -3
  302. package/lib/esm/rpc/server.js +181 -13
  303. package/lib/esm/rpc/server.js.map +1 -1
  304. package/lib/esm/rpc/transaction.js +2 -20
  305. package/lib/esm/rpc/transaction.js.map +1 -1
  306. package/lib/esm/webauth/challenge_transaction.js +7 -22
  307. package/lib/esm/webauth/challenge_transaction.js.map +1 -1
  308. package/lib/esm/webauth/utils.js +1 -20
  309. package/lib/esm/webauth/utils.js.map +1 -1
  310. package/package.json +35 -30
@@ -61,6 +61,12 @@ function findCreatedAccountSequenceInTransactionMeta(meta) {
61
61
  }
62
62
  throw new Error("No account created in transaction");
63
63
  }
64
+ function contractSpecTypeName(td) {
65
+ if (td.switch().value === curr_generated.default.ScSpecType.scSpecTypeUdt().value) {
66
+ return td.udt().name().toString();
67
+ }
68
+ return td.switch().name.replace(/^scSpecType/, "");
69
+ }
64
70
  class RpcServer {
65
71
  serverURL;
66
72
  /**
@@ -397,6 +403,35 @@ class RpcServer {
397
403
  };
398
404
  }
399
405
  }
406
+ /**
407
+ * Retrieves the deployed contract instance for a given contract ID.
408
+ *
409
+ * The instance describes the contract's executable — either a Wasm hash or
410
+ * the built-in Stellar Asset Contract — along with its instance storage.
411
+ *
412
+ * @param contractId - The contract ID (`C...`) to look up
413
+ * @returns The contract's `xdr.ScContractInstance`
414
+ * @throws If the contract instance cannot be found on the network.
415
+ *
416
+ * @example
417
+ * ```ts
418
+ * const instance = await server.getContractInstance(
419
+ * "CCJZ5DGASBWQXR5MPFCJXMBI333XE5U3FSJTNQU7RIKE3P5GN2K2WYD5",
420
+ * );
421
+ * console.log(instance.executable().switch().name);
422
+ * ```
423
+ */
424
+ async getContractInstance(contractId) {
425
+ const contractLedgerKey = new contract.Contract(contractId).getFootprint();
426
+ const response = await this.getLedgerEntries(contractLedgerKey);
427
+ if (!response.entries.length || !response.entries[0]?.val) {
428
+ return Promise.reject({
429
+ code: 404,
430
+ message: "Could not obtain contract instance from server"
431
+ });
432
+ }
433
+ return response.entries[0].val.contractData().val().instance();
434
+ }
400
435
  /**
401
436
  * Retrieves the WASM bytecode for a given contract.
402
437
  *
@@ -404,10 +439,14 @@ class RpcServer {
404
439
  * deployed on the Soroban network. The WASM bytecode represents the executable
405
440
  * code of the contract.
406
441
  *
442
+ * This only works for Wasm-based contracts. A built-in Stellar Asset Contract
443
+ * (SAC) has no Wasm bytecode on-chain, so this throws for a SAC; use
444
+ * {@link contract.Client.from} to build a client from the embedded SAC spec.
445
+ *
407
446
  * @param contractId - The contract ID containing the WASM bytecode to retrieve
408
447
  * @returns A Buffer containing the WASM bytecode
409
448
  * @throws If the contract or its associated WASM bytecode cannot be
410
- * found on the network.
449
+ * found on the network, or if the contract is a Stellar Asset Contract (SAC).
411
450
  *
412
451
  * @example
413
452
  * ```ts
@@ -421,16 +460,14 @@ class RpcServer {
421
460
  * ```
422
461
  */
423
462
  async getContractWasmByContractId(contractId) {
424
- const contractLedgerKey = new contract.Contract(contractId).getFootprint();
425
- const response = await this.getLedgerEntries(contractLedgerKey);
426
- if (!response.entries.length || !response.entries[0]?.val) {
463
+ const instance = await this.getContractInstance(contractId);
464
+ if (instance.executable().switch() === curr_generated.default.ContractExecutableType.contractExecutableStellarAsset()) {
427
465
  return Promise.reject({
428
- code: 404,
429
- message: `Could not obtain contract hash from server`
466
+ code: 400,
467
+ message: `Contract ${contractId} is a Stellar Asset Contract (SAC), which has no Wasm bytecode. Use contract.Client.from() to build a client from the built-in SAC spec instead.`
430
468
  });
431
469
  }
432
- const wasmHash = response.entries[0].val.contractData().val().instance().executable().wasmHash();
433
- return this.getContractWasmByHash(wasmHash);
470
+ return this.getContractWasmByHash(instance.executable().wasmHash());
434
471
  }
435
472
  /**
436
473
  * Retrieves the WASM bytecode for a given contract hash.
@@ -472,6 +509,124 @@ class RpcServer {
472
509
  const wasmBuffer = responseWasm.entries[0].val.contractCode().code();
473
510
  return wasmBuffer;
474
511
  }
512
+ /**
513
+ * Performs a read-only call to a contract method and returns the decoded result.
514
+ *
515
+ * This is a convenience wrapper for one-line contract state queries: it builds
516
+ * a {@link contract.Client} for the contract, simulates the method call, and
517
+ * returns the spec-decoded return value — no manual transaction assembly,
518
+ * signing, or submission required.
519
+ *
520
+ * Works for both Wasm contracts and built-in Stellar Asset Contracts (SACs):
521
+ * the embedded SAC spec is used automatically for SACs (see
522
+ * {@link contract.Client.from}). The query reuses this server's transport
523
+ * (headers, interceptors, `allowHttp`).
524
+ *
525
+ * @typeParam T - the expected (decoded) return type of the method
526
+ * @param contractId - the contract to query (`C...`)
527
+ * @param method - the contract method to call
528
+ * @param args - named arguments for the method, keyed by parameter name
529
+ * (omit for methods that take no arguments)
530
+ * @param networkPassphrase - (optional) the network passphrase. If omitted, a
531
+ * request about network information will be made (see {@link getNetwork}).
532
+ * You can refer to {@link Networks} for a list of built-in passphrases,
533
+ * e.g., `Networks.TESTNET`.
534
+ * @returns An object with the method's decoded return value (`result`) and
535
+ * `isReadCall`: whether this specific call is a side-effect-free read that
536
+ * needs no signature (it wrote no state and required no authorization).
537
+ * `isReadCall` is per-call, not per-method: it reflects the given `args`.
538
+ * Since `queryContract` never signs or sends, `isReadCall: false` means the
539
+ * `result` is a simulation preview of a call that would change state.
540
+ * @throws If the contract has no such method, or if the simulation fails.
541
+ *
542
+ * @example
543
+ * ```ts
544
+ * const { result: decimals, isReadCall } = await server.queryContract<number>(
545
+ * "CCJZ5DGASBWQXR5MPFCJXMBI333XE5U3FSJTNQU7RIKE3P5GN2K2WYD5",
546
+ * "decimals",
547
+ * );
548
+ * const { result: balance } = await server.queryContract<bigint>(
549
+ * "CCJZ5DGASBWQXR5MPFCJXMBI333XE5U3FSJTNQU7RIKE3P5GN2K2WYD5",
550
+ * "balance",
551
+ * { id: "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ" },
552
+ * );
553
+ * ```
554
+ */
555
+ async queryContract(contractId, method, args = {}, networkPassphrase) {
556
+ const passphrase = networkPassphrase ?? (await this.getNetwork()).passphrase;
557
+ const { Client } = await Promise.resolve().then(function () { return require('../contract/client.js'); });
558
+ const client = await Client.from({
559
+ contractId,
560
+ rpcUrl: this.serverURL.toString(),
561
+ networkPassphrase: passphrase,
562
+ server: this
563
+ });
564
+ const isContractMethod = client.spec.funcs().some((fn) => fn.name().toString() === method);
565
+ const { sanitizeIdentifier } = await Promise.resolve().then(function () { return require('../bindings/utils.js'); });
566
+ const invoke = client[sanitizeIdentifier(method)];
567
+ if (!isContractMethod || typeof invoke !== "function") {
568
+ throw new TypeError(`Contract ${contractId} has no method '${method}'`);
569
+ }
570
+ const assembled = await invoke(args);
571
+ return { result: assembled.result, isReadCall: assembled.isReadCall };
572
+ }
573
+ /**
574
+ * Lists a contract's callable methods and their signatures.
575
+ *
576
+ * A discovery helper for tooling, dapps, and agents that need to inspect an
577
+ * arbitrary contract without knowing its interface up front. It resolves the
578
+ * contract's spec (embedded in the Wasm for regular contracts, or the
579
+ * built-in spec for Stellar Asset Contracts — see {@link contract.Client.from})
580
+ * and reports each declared function's name, inputs, and outputs. No method
581
+ * is invoked or simulated; this performs only the spec lookup.
582
+ *
583
+ * The complement to {@link queryContract}: list methods here, then call a
584
+ * read-only one with `server.queryContract(contractId, method, args?)`.
585
+ *
586
+ * @param contractId - the contract to inspect (`C...`)
587
+ * @param networkPassphrase - (optional) the network passphrase. If omitted, a
588
+ * request about network information will be made (see {@link getNetwork}).
589
+ * You can refer to {@link Networks} for a list of built-in passphrases,
590
+ * e.g., `Networks.TESTNET`.
591
+ * @returns The contract's methods, in the order they appear in the spec
592
+ *
593
+ * @example
594
+ * ```ts
595
+ * const methods = await server.getContractMethods(
596
+ * "CCJZ5DGASBWQXR5MPFCJXMBI333XE5U3FSJTNQU7RIKE3P5GN2K2WYD5",
597
+ * );
598
+ * // [
599
+ * // { name: "decimals", inputs: [], outputs: ["U32"] },
600
+ * // { name: "balance", inputs: [{ name: "id", type: "Address" }], outputs: ["I128"] },
601
+ * // { name: "transfer", inputs: [...], outputs: [] },
602
+ * // ]
603
+ * ```
604
+ */
605
+ async getContractMethods(contractId, networkPassphrase) {
606
+ const passphrase = networkPassphrase ?? (await this.getNetwork()).passphrase;
607
+ const { Client } = await Promise.resolve().then(function () { return require('../contract/client.js'); });
608
+ const client = await Client.from({
609
+ contractId,
610
+ rpcUrl: this.serverURL.toString(),
611
+ networkPassphrase: passphrase,
612
+ server: this
613
+ });
614
+ return client.spec.funcs().map((fn) => {
615
+ const doc = fn.doc().toString();
616
+ const method = {
617
+ name: fn.name().toString(),
618
+ inputs: fn.inputs().map((input) => ({
619
+ name: input.name().toString(),
620
+ type: contractSpecTypeName(input.type())
621
+ })),
622
+ outputs: fn.outputs().map(contractSpecTypeName)
623
+ };
624
+ if (doc) {
625
+ method.doc = doc;
626
+ }
627
+ return method;
628
+ });
629
+ }
475
630
  /**
476
631
  * Reads the current value of arbitrary ledger entries directly.
477
632
  *
@@ -798,6 +953,15 @@ class RpcServer {
798
953
  * auth mode to use for simulation: `enforce` for enforcement mode,
799
954
  * `record` for recording mode, or `record_allow_nonroot` for recording
800
955
  * mode that allows non-root authorization
956
+ * @param useUpgradedAuth - (optional) opt simulation into recording
957
+ * v2 address credentials (CAP-71) instead of the legacy v1 address
958
+ * credentials. Best-effort: it only affects the recording auth modes and
959
+ * is silently ignored on protocol versions whose host cannot emit v2
960
+ * credentials.
961
+ *
962
+ * **Deprecated**: this flag is transitional. Once the network returns v2
963
+ * credentials by default (protocol 28), it becomes a no-op — do not rely
964
+ * on omitting it to keep receiving the legacy v1 format.
801
965
  *
802
966
  * @returns An object with the
803
967
  * cost, footprint, result/auth requirements (if applicable), and error of
@@ -837,12 +1001,15 @@ class RpcServer {
837
1001
  * });
838
1002
  * ```
839
1003
  */
840
- async simulateTransaction(tx, addlResources, authMode) {
841
- return this._simulateTransaction(tx, addlResources, authMode).then(
842
- parsers.parseRawSimulation
843
- );
1004
+ async simulateTransaction(tx, addlResources, authMode, useUpgradedAuth) {
1005
+ return this._simulateTransaction(
1006
+ tx,
1007
+ addlResources,
1008
+ authMode,
1009
+ useUpgradedAuth
1010
+ ).then(parsers.parseRawSimulation);
844
1011
  }
845
- async _simulateTransaction(transaction, addlResources, authMode) {
1012
+ async _simulateTransaction(transaction, addlResources, authMode, useUpgradedAuth) {
846
1013
  return jsonrpc.postObject(
847
1014
  this.httpClient,
848
1015
  this.serverURL.toString(),
@@ -850,6 +1017,7 @@ class RpcServer {
850
1017
  {
851
1018
  transaction: transaction.toXDR(),
852
1019
  authMode,
1020
+ ...useUpgradedAuth !== void 0 && { useUpgradedAuth },
853
1021
  ...addlResources !== void 0 && {
854
1022
  resourceConfig: {
855
1023
  instructionLeeway: addlResources.cpuInstructions