@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.
- package/README.md +41 -2
- package/dist/stellar-sdk-axios.js +5401 -3690
- package/dist/stellar-sdk-axios.js.map +1 -1
- package/dist/stellar-sdk-axios.min.js +12 -11
- package/dist/stellar-sdk-axios.min.js.map +1 -1
- package/dist/stellar-sdk.js +4850 -3681
- package/dist/stellar-sdk.js.map +1 -1
- package/dist/stellar-sdk.min.js +17 -17
- package/dist/stellar-sdk.min.js.map +1 -1
- package/lib/axios/cjs/base/auth.js +147 -30
- package/lib/axios/cjs/base/auth.js.map +1 -1
- package/lib/axios/cjs/base/index.js +113 -0
- package/lib/axios/cjs/base/index.js.map +1 -0
- package/lib/axios/cjs/base/keypair.js +39 -0
- package/lib/axios/cjs/base/keypair.js.map +1 -1
- package/lib/axios/cjs/base/scval.js +34 -0
- package/lib/axios/cjs/base/scval.js.map +1 -1
- package/lib/axios/cjs/bindings/client.js +170 -0
- package/lib/axios/cjs/bindings/client.js.map +1 -1
- package/lib/axios/cjs/bindings/config.js +1 -1
- package/lib/axios/cjs/bindings/generator.js +45 -16
- package/lib/axios/cjs/bindings/generator.js.map +1 -1
- package/lib/axios/cjs/bindings/types.js +151 -1
- package/lib/axios/cjs/bindings/types.js.map +1 -1
- package/lib/axios/cjs/bindings/utils.js +10 -0
- package/lib/axios/cjs/bindings/utils.js.map +1 -1
- package/lib/axios/cjs/cli/index.js +19 -22
- package/lib/axios/cjs/cli/index.js.map +1 -1
- package/lib/axios/cjs/cli/util.js +1 -20
- package/lib/axios/cjs/cli/util.js.map +1 -1
- package/lib/axios/cjs/contract/assembled_transaction.js +39 -17
- package/lib/axios/cjs/contract/assembled_transaction.js.map +1 -1
- package/lib/axios/cjs/contract/basic_node_signer.js +8 -42
- package/lib/axios/cjs/contract/basic_node_signer.js.map +1 -1
- package/lib/axios/cjs/contract/client.js +56 -3
- package/lib/axios/cjs/contract/client.js.map +1 -1
- package/lib/axios/cjs/contract/event_spec.js +164 -0
- package/lib/axios/cjs/contract/event_spec.js.map +1 -0
- package/lib/axios/cjs/contract/index.js +2 -0
- package/lib/axios/cjs/contract/index.js.map +1 -1
- package/lib/axios/cjs/contract/sent_transaction.js +0 -20
- package/lib/axios/cjs/contract/sent_transaction.js.map +1 -1
- package/lib/axios/cjs/contract/signer.js +96 -0
- package/lib/axios/cjs/contract/signer.js.map +1 -0
- package/lib/axios/cjs/contract/spec.js +107 -3
- package/lib/axios/cjs/contract/spec.js.map +1 -1
- package/lib/axios/cjs/contract/types.js.map +1 -1
- package/lib/axios/cjs/errors/transaction_failed.js +62 -0
- package/lib/axios/cjs/errors/transaction_failed.js.map +1 -0
- package/lib/axios/cjs/errors/wrap_http_error.js +20 -0
- package/lib/axios/cjs/errors/wrap_http_error.js.map +1 -0
- package/lib/axios/cjs/federation/server.js +15 -35
- package/lib/axios/cjs/federation/server.js.map +1 -1
- package/lib/axios/cjs/horizon/account_response.js +0 -20
- package/lib/axios/cjs/horizon/account_response.js.map +1 -1
- package/lib/axios/cjs/horizon/horizon_api.js +5 -0
- package/lib/axios/cjs/horizon/horizon_api.js.map +1 -1
- package/lib/axios/cjs/horizon/horizon_axios_client.js +1 -1
- package/lib/axios/cjs/horizon/server.js +20 -26
- package/lib/axios/cjs/horizon/server.js.map +1 -1
- package/lib/axios/cjs/index.js +66 -65
- package/lib/axios/cjs/index.js.map +1 -1
- package/lib/axios/cjs/rpc/api.js.map +1 -1
- package/lib/axios/cjs/rpc/axios.js +1 -1
- package/lib/axios/cjs/rpc/server.js +181 -13
- package/lib/axios/cjs/rpc/server.js.map +1 -1
- package/lib/axios/cjs/rpc/transaction.js +2 -20
- package/lib/axios/cjs/rpc/transaction.js.map +1 -1
- package/lib/axios/cjs/webauth/challenge_transaction.js +7 -22
- package/lib/axios/cjs/webauth/challenge_transaction.js.map +1 -1
- package/lib/axios/cjs/webauth/utils.js +1 -20
- package/lib/axios/cjs/webauth/utils.js.map +1 -1
- package/lib/axios/esm/base/auth.d.ts +181 -13
- package/lib/axios/esm/base/auth.js +146 -31
- package/lib/axios/esm/base/auth.js.map +1 -1
- package/lib/axios/esm/base/index.d.ts +2 -2
- package/lib/axios/esm/base/index.js +44 -0
- package/lib/axios/esm/base/index.js.map +1 -0
- package/lib/axios/esm/base/keypair.d.ts +27 -0
- package/lib/axios/esm/base/keypair.js +39 -0
- package/lib/axios/esm/base/keypair.js.map +1 -1
- package/lib/axios/esm/base/scval.d.ts +4 -0
- package/lib/axios/esm/base/scval.js +34 -0
- package/lib/axios/esm/base/scval.js.map +1 -1
- package/lib/axios/esm/bindings/client.d.ts +39 -0
- package/lib/axios/esm/bindings/client.js +171 -1
- package/lib/axios/esm/bindings/client.js.map +1 -1
- package/lib/axios/esm/bindings/config.js +1 -1
- package/lib/axios/esm/bindings/generator.d.ts +34 -0
- package/lib/axios/esm/bindings/generator.js +45 -16
- package/lib/axios/esm/bindings/generator.js.map +1 -1
- package/lib/axios/esm/bindings/types.d.ts +42 -0
- package/lib/axios/esm/bindings/types.js +153 -3
- package/lib/axios/esm/bindings/types.js.map +1 -1
- package/lib/axios/esm/bindings/utils.d.ts +10 -0
- package/lib/axios/esm/bindings/utils.js +9 -1
- package/lib/axios/esm/bindings/utils.js.map +1 -1
- package/lib/axios/esm/cli/index.js +19 -22
- package/lib/axios/esm/cli/index.js.map +1 -1
- package/lib/axios/esm/cli/util.d.ts +1 -1
- package/lib/axios/esm/cli/util.js +1 -20
- package/lib/axios/esm/cli/util.js.map +1 -1
- package/lib/axios/esm/contract/assembled_transaction.d.ts +7 -5
- package/lib/axios/esm/contract/assembled_transaction.js +39 -17
- package/lib/axios/esm/contract/assembled_transaction.js.map +1 -1
- package/lib/axios/esm/contract/basic_node_signer.d.ts +3 -0
- package/lib/axios/esm/contract/basic_node_signer.js +8 -42
- package/lib/axios/esm/contract/basic_node_signer.js.map +1 -1
- package/lib/axios/esm/contract/client.d.ts +49 -3
- package/lib/axios/esm/contract/client.js +56 -3
- package/lib/axios/esm/contract/client.js.map +1 -1
- package/lib/axios/esm/contract/event_spec.d.ts +78 -0
- package/lib/axios/esm/contract/event_spec.js +159 -0
- package/lib/axios/esm/contract/event_spec.js.map +1 -0
- package/lib/axios/esm/contract/index.d.ts +3 -0
- package/lib/axios/esm/contract/index.js +1 -0
- package/lib/axios/esm/contract/index.js.map +1 -1
- package/lib/axios/esm/contract/sent_transaction.js +0 -20
- package/lib/axios/esm/contract/sent_transaction.js.map +1 -1
- package/lib/axios/esm/contract/signer.d.ts +104 -0
- package/lib/axios/esm/contract/signer.js +91 -0
- package/lib/axios/esm/contract/signer.js.map +1 -0
- package/lib/axios/esm/contract/spec.d.ts +84 -0
- package/lib/axios/esm/contract/spec.js +107 -3
- package/lib/axios/esm/contract/spec.js.map +1 -1
- package/lib/axios/esm/contract/types.d.ts +25 -8
- package/lib/axios/esm/contract/types.js.map +1 -1
- package/lib/axios/esm/errors/index.d.ts +1 -0
- package/lib/axios/esm/errors/transaction_failed.d.ts +55 -0
- package/lib/axios/esm/errors/transaction_failed.js +60 -0
- package/lib/axios/esm/errors/transaction_failed.js.map +1 -0
- package/lib/axios/esm/errors/wrap_http_error.d.ts +20 -0
- package/lib/axios/esm/errors/wrap_http_error.js +18 -0
- package/lib/axios/esm/errors/wrap_http_error.js.map +1 -0
- package/lib/axios/esm/federation/server.js +15 -35
- package/lib/axios/esm/federation/server.js.map +1 -1
- package/lib/axios/esm/horizon/account_response.js +0 -20
- package/lib/axios/esm/horizon/account_response.js.map +1 -1
- package/lib/axios/esm/horizon/horizon_api.d.ts +12 -1
- package/lib/axios/esm/horizon/horizon_api.js +5 -0
- package/lib/axios/esm/horizon/horizon_api.js.map +1 -1
- package/lib/axios/esm/horizon/horizon_axios_client.js +1 -1
- package/lib/axios/esm/horizon/server.d.ts +10 -4
- package/lib/axios/esm/horizon/server.js +20 -26
- package/lib/axios/esm/horizon/server.js.map +1 -1
- package/lib/axios/esm/index.js +27 -29
- package/lib/axios/esm/index.js.map +1 -1
- package/lib/axios/esm/rpc/api.d.ts +21 -0
- package/lib/axios/esm/rpc/api.js.map +1 -1
- package/lib/axios/esm/rpc/axios.js +1 -1
- package/lib/axios/esm/rpc/server.d.ts +115 -3
- package/lib/axios/esm/rpc/server.js +181 -13
- package/lib/axios/esm/rpc/server.js.map +1 -1
- package/lib/axios/esm/rpc/transaction.js +2 -20
- package/lib/axios/esm/rpc/transaction.js.map +1 -1
- package/lib/axios/esm/webauth/challenge_transaction.js +7 -22
- package/lib/axios/esm/webauth/challenge_transaction.js.map +1 -1
- package/lib/axios/esm/webauth/utils.js +1 -20
- package/lib/axios/esm/webauth/utils.js.map +1 -1
- package/lib/cjs/base/auth.js +147 -30
- package/lib/cjs/base/auth.js.map +1 -1
- package/lib/cjs/base/index.js +113 -0
- package/lib/cjs/base/index.js.map +1 -0
- package/lib/cjs/base/keypair.js +39 -0
- package/lib/cjs/base/keypair.js.map +1 -1
- package/lib/cjs/base/scval.js +34 -0
- package/lib/cjs/base/scval.js.map +1 -1
- package/lib/cjs/bindings/client.js +170 -0
- package/lib/cjs/bindings/client.js.map +1 -1
- package/lib/cjs/bindings/config.js +1 -1
- package/lib/cjs/bindings/generator.js +45 -16
- package/lib/cjs/bindings/generator.js.map +1 -1
- package/lib/cjs/bindings/types.js +151 -1
- package/lib/cjs/bindings/types.js.map +1 -1
- package/lib/cjs/bindings/utils.js +10 -0
- package/lib/cjs/bindings/utils.js.map +1 -1
- package/lib/cjs/cli/index.js +19 -22
- package/lib/cjs/cli/index.js.map +1 -1
- package/lib/cjs/cli/util.js +1 -20
- package/lib/cjs/cli/util.js.map +1 -1
- package/lib/cjs/contract/assembled_transaction.js +39 -17
- package/lib/cjs/contract/assembled_transaction.js.map +1 -1
- package/lib/cjs/contract/basic_node_signer.js +8 -42
- package/lib/cjs/contract/basic_node_signer.js.map +1 -1
- package/lib/cjs/contract/client.js +56 -3
- package/lib/cjs/contract/client.js.map +1 -1
- package/lib/cjs/contract/event_spec.js +164 -0
- package/lib/cjs/contract/event_spec.js.map +1 -0
- package/lib/cjs/contract/index.js +2 -0
- package/lib/cjs/contract/index.js.map +1 -1
- package/lib/cjs/contract/sent_transaction.js +0 -20
- package/lib/cjs/contract/sent_transaction.js.map +1 -1
- package/lib/cjs/contract/signer.js +96 -0
- package/lib/cjs/contract/signer.js.map +1 -0
- package/lib/cjs/contract/spec.js +107 -3
- package/lib/cjs/contract/spec.js.map +1 -1
- package/lib/cjs/contract/types.js.map +1 -1
- package/lib/cjs/errors/transaction_failed.js +62 -0
- package/lib/cjs/errors/transaction_failed.js.map +1 -0
- package/lib/cjs/errors/wrap_http_error.js +20 -0
- package/lib/cjs/errors/wrap_http_error.js.map +1 -0
- package/lib/cjs/federation/server.js +15 -35
- package/lib/cjs/federation/server.js.map +1 -1
- package/lib/cjs/horizon/account_response.js +0 -20
- package/lib/cjs/horizon/account_response.js.map +1 -1
- package/lib/cjs/horizon/horizon_api.js +5 -0
- package/lib/cjs/horizon/horizon_api.js.map +1 -1
- package/lib/cjs/horizon/horizon_axios_client.js +1 -1
- package/lib/cjs/horizon/server.js +20 -26
- package/lib/cjs/horizon/server.js.map +1 -1
- package/lib/cjs/index.js +66 -65
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/rpc/api.js.map +1 -1
- package/lib/cjs/rpc/axios.js +1 -1
- package/lib/cjs/rpc/server.js +181 -13
- package/lib/cjs/rpc/server.js.map +1 -1
- package/lib/cjs/rpc/transaction.js +2 -20
- package/lib/cjs/rpc/transaction.js.map +1 -1
- package/lib/cjs/webauth/challenge_transaction.js +7 -22
- package/lib/cjs/webauth/challenge_transaction.js.map +1 -1
- package/lib/cjs/webauth/utils.js +1 -20
- package/lib/cjs/webauth/utils.js.map +1 -1
- package/lib/esm/base/auth.d.ts +181 -13
- package/lib/esm/base/auth.js +146 -31
- package/lib/esm/base/auth.js.map +1 -1
- package/lib/esm/base/index.d.ts +2 -2
- package/lib/esm/base/index.js +44 -0
- package/lib/esm/base/index.js.map +1 -0
- package/lib/esm/base/keypair.d.ts +27 -0
- package/lib/esm/base/keypair.js +39 -0
- package/lib/esm/base/keypair.js.map +1 -1
- package/lib/esm/base/scval.d.ts +4 -0
- package/lib/esm/base/scval.js +34 -0
- package/lib/esm/base/scval.js.map +1 -1
- package/lib/esm/bindings/client.d.ts +39 -0
- package/lib/esm/bindings/client.js +171 -1
- package/lib/esm/bindings/client.js.map +1 -1
- package/lib/esm/bindings/config.js +1 -1
- package/lib/esm/bindings/generator.d.ts +34 -0
- package/lib/esm/bindings/generator.js +45 -16
- package/lib/esm/bindings/generator.js.map +1 -1
- package/lib/esm/bindings/types.d.ts +42 -0
- package/lib/esm/bindings/types.js +153 -3
- package/lib/esm/bindings/types.js.map +1 -1
- package/lib/esm/bindings/utils.d.ts +10 -0
- package/lib/esm/bindings/utils.js +9 -1
- package/lib/esm/bindings/utils.js.map +1 -1
- package/lib/esm/cli/index.js +19 -22
- package/lib/esm/cli/index.js.map +1 -1
- package/lib/esm/cli/util.d.ts +1 -1
- package/lib/esm/cli/util.js +1 -20
- package/lib/esm/cli/util.js.map +1 -1
- package/lib/esm/contract/assembled_transaction.d.ts +7 -5
- package/lib/esm/contract/assembled_transaction.js +39 -17
- package/lib/esm/contract/assembled_transaction.js.map +1 -1
- package/lib/esm/contract/basic_node_signer.d.ts +3 -0
- package/lib/esm/contract/basic_node_signer.js +8 -42
- package/lib/esm/contract/basic_node_signer.js.map +1 -1
- package/lib/esm/contract/client.d.ts +49 -3
- package/lib/esm/contract/client.js +56 -3
- package/lib/esm/contract/client.js.map +1 -1
- package/lib/esm/contract/event_spec.d.ts +78 -0
- package/lib/esm/contract/event_spec.js +159 -0
- package/lib/esm/contract/event_spec.js.map +1 -0
- package/lib/esm/contract/index.d.ts +3 -0
- package/lib/esm/contract/index.js +1 -0
- package/lib/esm/contract/index.js.map +1 -1
- package/lib/esm/contract/sent_transaction.js +0 -20
- package/lib/esm/contract/sent_transaction.js.map +1 -1
- package/lib/esm/contract/signer.d.ts +104 -0
- package/lib/esm/contract/signer.js +91 -0
- package/lib/esm/contract/signer.js.map +1 -0
- package/lib/esm/contract/spec.d.ts +84 -0
- package/lib/esm/contract/spec.js +107 -3
- package/lib/esm/contract/spec.js.map +1 -1
- package/lib/esm/contract/types.d.ts +25 -8
- package/lib/esm/contract/types.js.map +1 -1
- package/lib/esm/errors/index.d.ts +1 -0
- package/lib/esm/errors/transaction_failed.d.ts +55 -0
- package/lib/esm/errors/transaction_failed.js +60 -0
- package/lib/esm/errors/transaction_failed.js.map +1 -0
- package/lib/esm/errors/wrap_http_error.d.ts +20 -0
- package/lib/esm/errors/wrap_http_error.js +18 -0
- package/lib/esm/errors/wrap_http_error.js.map +1 -0
- package/lib/esm/federation/server.js +15 -35
- package/lib/esm/federation/server.js.map +1 -1
- package/lib/esm/horizon/account_response.js +0 -20
- package/lib/esm/horizon/account_response.js.map +1 -1
- package/lib/esm/horizon/horizon_api.d.ts +12 -1
- package/lib/esm/horizon/horizon_api.js +5 -0
- package/lib/esm/horizon/horizon_api.js.map +1 -1
- package/lib/esm/horizon/horizon_axios_client.js +1 -1
- package/lib/esm/horizon/server.d.ts +10 -4
- package/lib/esm/horizon/server.js +20 -26
- package/lib/esm/horizon/server.js.map +1 -1
- package/lib/esm/index.js +27 -29
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/rpc/api.d.ts +21 -0
- package/lib/esm/rpc/api.js.map +1 -1
- package/lib/esm/rpc/axios.js +1 -1
- package/lib/esm/rpc/server.d.ts +115 -3
- package/lib/esm/rpc/server.js +181 -13
- package/lib/esm/rpc/server.js.map +1 -1
- package/lib/esm/rpc/transaction.js +2 -20
- package/lib/esm/rpc/transaction.js.map +1 -1
- package/lib/esm/webauth/challenge_transaction.js +7 -22
- package/lib/esm/webauth/challenge_transaction.js.map +1 -1
- package/lib/esm/webauth/utils.js +1 -20
- package/lib/esm/webauth/utils.js.map +1 -1
- 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
|
|
425
|
-
|
|
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:
|
|
429
|
-
message: `
|
|
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
|
-
|
|
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(
|
|
842
|
-
|
|
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
|