diff --git a/CHANGELOG.md b/CHANGELOG.md
index 303a7473a..23d4a25e3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,9 @@ A breaking change will get clearly marked in this log.
## Unreleased
+### Fixed
+* The `SorobanRpc.Server.getTransaction` method will now return the full response when encountering a `FAILED` transaction result ([#872](https://github.com/stellar/js-stellar-sdk/pull/872)).
+
## [v11.0.0-beta.5](https://github.com/stellar/js-stellar-sdk/compare/v11.0.0-beta.4...v11.0.0-beta.5)
diff --git a/src/soroban/soroban_rpc.ts b/src/soroban/api.ts
similarity index 97%
rename from src/soroban/soroban_rpc.ts
rename to src/soroban/api.ts
index bb1bbd3e6..1ddb84965 100644
--- a/src/soroban/soroban_rpc.ts
+++ b/src/soroban/api.ts
@@ -96,6 +96,14 @@ export namespace Api {
export interface GetFailedTransactionResponse
extends GetAnyTransactionResponse {
status: GetTransactionStatus.FAILED;
+
+ ledger: number;
+ createdAt: number;
+ applicationOrder: number;
+ feeBump: boolean;
+ envelopeXdr: xdr.TransactionEnvelope;
+ resultXdr: xdr.TransactionResult;
+ resultMetaXdr: xdr.TransactionMeta;
}
export interface GetSuccessfulTransactionResponse
diff --git a/src/soroban/index.ts b/src/soroban/index.ts
index a6084da00..36e296ee1 100644
--- a/src/soroban/index.ts
+++ b/src/soroban/index.ts
@@ -2,7 +2,7 @@
///
// Expose all types
-export * from './soroban_rpc';
+export * from './api';
// soroban-client classes to expose
export { Server, Durability } from './server';
diff --git a/src/soroban/parsers.ts b/src/soroban/parsers.ts
index 429030903..a5d0b8a01 100644
--- a/src/soroban/parsers.ts
+++ b/src/soroban/parsers.ts
@@ -1,5 +1,5 @@
import { xdr, Contract, SorobanDataBuilder } from 'stellar-base';
-import { Api } from './soroban_rpc';
+import { Api } from './api';
export function parseRawSendTransaction(
r: Api.RawSendTransactionResponse
diff --git a/src/soroban/server.ts b/src/soroban/server.ts
index 8d78fc8d6..97e0539e9 100644
--- a/src/soroban/server.ts
+++ b/src/soroban/server.ts
@@ -15,7 +15,7 @@ import {
import AxiosClient from './axios';
import { Api as FriendbotApi } from '../friendbot';
import * as jsonrpc from './jsonrpc';
-import { Api } from './soroban_rpc';
+import { Api } from './api';
import { assembleTransaction } from './transaction';
import {
parseRawSendTransaction,
@@ -307,14 +307,14 @@ export class Server {
hash: string
): Promise {
return this._getTransaction(hash).then((raw) => {
- let successInfo: Omit<
+ let foundInfo: Omit<
Api.GetSuccessfulTransactionResponse,
- keyof Api.GetFailedTransactionResponse
+ keyof Api.GetMissingTransactionResponse
> = {} as any;
- if (raw.status === Api.GetTransactionStatus.SUCCESS) {
+ if (raw.status !== Api.GetTransactionStatus.NOT_FOUND) {
const meta = xdr.TransactionMeta.fromXDR(raw.resultMetaXdr!, 'base64');
- successInfo = {
+ foundInfo = {
ledger: raw.ledger!,
createdAt: raw.createdAt!,
applicationOrder: raw.applicationOrder!,
@@ -326,7 +326,8 @@ export class Server {
resultXdr: xdr.TransactionResult.fromXDR(raw.resultXdr!, 'base64'),
resultMetaXdr: meta,
...(meta.switch() === 3 &&
- meta.v3().sorobanMeta() !== null && {
+ meta.v3().sorobanMeta() !== null &&
+ raw.status === Api.GetTransactionStatus.SUCCESS && {
returnValue: meta.v3().sorobanMeta()?.returnValue()
})
};
@@ -338,7 +339,7 @@ export class Server {
latestLedgerCloseTime: raw.latestLedgerCloseTime,
oldestLedger: raw.oldestLedger,
oldestLedgerCloseTime: raw.oldestLedgerCloseTime,
- ...successInfo
+ ...foundInfo
};
return result;
diff --git a/src/soroban/transaction.ts b/src/soroban/transaction.ts
index 0ef54876c..73a310a22 100644
--- a/src/soroban/transaction.ts
+++ b/src/soroban/transaction.ts
@@ -5,7 +5,7 @@ import {
TransactionBuilder
} from 'stellar-base';
-import { Api } from './soroban_rpc';
+import { Api } from './api';
import { parseRawSimulation } from './parsers';
/**