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'; /**