Skip to content
4 changes: 4 additions & 0 deletions packages/stellar-wallet-snap/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **BREAKING** Bump `@metamask/keyring-snap-sdk` from `^9.2.1` to `^10.0.0` ([#214](https://github.com/MetaMask/internal-snaps/pull/214))
- **BREAKING** Bump `@metamask/snaps-sdk` from `^11.2.0` to `^12.0.1` ([#214](https://github.com/MetaMask/internal-snaps/pull/214))

### Fixed

- Fill contract-based receive transactions in history instead of marking them as unknown ([#255](https://github.com/MetaMask/internal-snaps/pull/255))

## [0.1.0]

### Added
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ import {
swapTransactionPathReceiveWithStrictPathResponse,
receivePaymentTransactionPathReceiveResponse,
sep41SendTransactionResponse,
contractSwapReceiveNativeTransactionResponse,
contractSwapReceiveUSDCTransactionResponse,
} from './__mocks__/horizon-transaction-responses.fixtures';
import {
buildMockClassicTransaction,
Expand Down Expand Up @@ -386,6 +388,40 @@ describe('TransactionMapper', () => {
fromAddress: 'GB327AMKGJDXEMQREZRRVW7Y6KEKWPOWTJKCCYUQK7KKXVMCTNZEOYXU',
txnType: TransactionType.Receive,
},
{
testCase: 'receive native payment transaction via contract swap',
response: contractSwapReceiveNativeTransactionResponse,
fromAsset: getSlip44AssetId(scope),
fromAssetSymbol: NATIVE_ASSET_SYMBOL,
fromAmount: '59.1762381',
toAsset: getSlip44AssetId(scope),
toAssetSymbol: NATIVE_ASSET_SYMBOL,
toAmount: '59.1762381',
toAddress: accountAddress,
fromAddress: 'CCLWL5NYSV2WJQ3VBU44AMDHEVKEPA45N2QP2LL62O3JVKPGWWAQUVAG',
txnType: TransactionType.Receive,
},
{
testCase: 'receive USDC payment transaction via contract swap',
response: contractSwapReceiveUSDCTransactionResponse,
fromAsset: toCaip19ClassicAssetId(
scope,
'USDC',
'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN',
),
fromAssetSymbol: 'USDC',
fromAmount: '2.9558544',
toAsset: toCaip19ClassicAssetId(
scope,
'USDC',
'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN',
),
toAssetSymbol: 'USDC',
toAmount: '2.9558544',
toAddress: accountAddress,
fromAddress: 'CCLWL5NYSV2WJQ3VBU44AMDHEVKEPA45N2QP2LL62O3JVKPGWWAQUVAG',
txnType: TransactionType.Receive,
},
])(
'maps a $testCase from Horizon',
({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ import type {
KnownCaip19Sep41AssetId,
KnownCaip2ChainId,
} from '../../api';
import { NATIVE_ASSET_SYMBOL, STELLAR_DECIMAL_PLACES } from '../../constants';
import {
getAssetReference,
isSlip44Id,
parseClassicAssetCodeIssuer,
removeTrailingZeros,
stellarAssetToCaip19,
toDisplayBalance,
Expand Down Expand Up @@ -37,9 +41,11 @@ import {
import type { SuccessfulTransactionResult } from './xdrParser';
import {
isSep41TransferInvoke,
parseContractEventsFromResultMeta,
parseSep41TransferInvoke,
parseSuccessfulTransactionResult,
TransactionResultType,
parseTransferContractEventSafe,
} from './xdrParser';

export class TransactionMapper {
Expand Down Expand Up @@ -124,13 +130,15 @@ export class TransactionMapper {
const { address } = keyringAccount;

if (transaction.hasInvokeHostFunction && transaction.operationCount === 1) {
// Invoke host function: try SEP-41 send mapping first; fall back to unknown.
// Invoke host function: try SEP-41 send, then contract-receive from result meta.
return (
this.#mapSep41SendTransaction(
transaction,
keyringAccount,
assetMetadata,
) ?? this.#mapUnknownTransaction(transaction, keyringAccount)
) ??
this.#tryMapReceiveContractTxn(transaction, keyringAccount) ??
this.#mapUnknownTransaction(transaction, keyringAccount)
);
}

Expand Down Expand Up @@ -482,6 +490,74 @@ export class TransactionMapper {
});
}

/**
* Maps an invoke-host-function credit as a receive when `result_meta_xdr`
* has a SAC `transfer` event credited to this wallet.
*
* @param transaction - On-chain invoke transaction.
* @param keyringAccount - Wallet that may have been credited.
* @returns Receive keyring transaction, or `undefined` when meta does not match.
*/
#tryMapReceiveContractTxn(
transaction: Transaction,
keyringAccount: StellarKeyringAccount,
): KeyringTransaction | undefined {
if (
// A failed transaction does not contain the result_meta_xdr for us to extract the event data
transaction.status === TransactionStatus.Failed ||
// A transaction is not from the source account, so it is not a receive transaction.
transaction.isSourceAccount(keyringAccount.address)
) {
return undefined;
}

const resultMetaXdr = transaction.rawData?.result_meta_xdr;
if (!resultMetaXdr) {
return undefined;
}

const transfers = parseContractEventsFromResultMeta({
resultMetaXdr,
parseEvent: (event) =>
parseTransferContractEventSafe(
event,
keyringAccount.address,
transaction.scope,
),
});

// Same as classic receive: surface the first credited asset when several match.
const [parsed] = transfers;
if (!parsed) {
return undefined;
}

const asset = this.#caipAssetToKeyringAssetRow(
parsed.assetId,
toDisplayBalance(parsed.amount, STELLAR_DECIMAL_PLACES),
);

return this.#keyringTransactionBuilder.createTransaction({
type: KeyringTransactionType.Unknown,
request: {
...this.#commonOnChainFields(transaction, keyringAccount),
transactionType: TransactionType.Receive,
from: [
{
address: parsed.fromAddress,
asset,
},
],
to: [
{
address: keyringAccount.address,
asset,
},
],
},
});
}

#getCreateTime(transaction: Transaction): number {
const createdAtSeconds = transaction.rawData?.created_at
? Math.floor(new Date(transaction.rawData.created_at).getTime() / 1000)
Expand All @@ -490,6 +566,20 @@ export class TransactionMapper {
return this.#keyringTransactionBuilder.getCreateTime(createdAtSeconds);
}

#caipAssetToKeyringAssetRow(
assetId: KnownCaip19AssetIdOrSlip44Id,
amount: string,
): KeyringTransactionAsset {
const isSlip44 = isSlip44Id(assetId);
return this.#toKeyringAssetRow(
isSlip44
? NATIVE_ASSET_SYMBOL
: parseClassicAssetCodeIssuer(getAssetReference(assetId)).assetCode,
assetId,
amount,
);
}

#assetToKeyringAssetRow(
asset: Asset,
scope: KnownCaip2ChainId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -802,3 +802,123 @@ export const sep41SendTransactionResponse = {
},
},
} as unknown as Horizon.ServerApi.TransactionRecord;

export const contractSwapReceiveNativeTransactionResponse = {
_links: {
self: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions/d81cd563c9354138f569eebc569f44a278b9fb79fe6b7d3286445a3575e9c58d',
},
account: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/accounts/GBX2CFNBNJOLHK3RQXG5RKUMM4WCZ3SRUFZBL6CT76J6CACW7AEZ3SHN',
},
ledger: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/ledgers/64157023',
},
operations: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions/d81cd563c9354138f569eebc569f44a278b9fb79fe6b7d3286445a3575e9c58d/operations{?cursor,limit,order}',
templated: true,
},
effects: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions/d81cd563c9354138f569eebc569f44a278b9fb79fe6b7d3286445a3575e9c58d/effects{?cursor,limit,order}',
templated: true,
},
precedes: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions?order=asc\u0026cursor=275552315594575872',
},
succeeds: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions?order=desc\u0026cursor=275552315594575872',
},
transaction: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions/d81cd563c9354138f569eebc569f44a278b9fb79fe6b7d3286445a3575e9c58d',
},
},
id: 'd81cd563c9354138f569eebc569f44a278b9fb79fe6b7d3286445a3575e9c58d',
paging_token: '275552315594575872',
successful: true,
hash: 'd81cd563c9354138f569eebc569f44a278b9fb79fe6b7d3286445a3575e9c58d',
ledger: 64157023,
created_at: '2026-08-28T02:27:30Z',
source_account: 'GBX2CFNBNJOLHK3RQXG5RKUMM4WCZ3SRUFZBL6CT76J6CACW7AEZ3SHN',
source_account_sequence: '266080959223302122',
fee_account: 'GBX2CFNBNJOLHK3RQXG5RKUMM4WCZ3SRUFZBL6CT76J6CACW7AEZ3SHN',
fee_charged: '221820',
max_fee: '761852',
operation_count: 1,
envelope_xdr:
'AAAAAgAAAABvoRWhalyzq3GFzdiqjGcsLO5RoXIV+FP/k+EAVvgJnQALn/wDsU85AAAH6gAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAGAAAAAAAAAABl2X1uJV1ZMN1DTnAMGclVEeDnW6g/S1+07aaqea1gQoAAAAId2l0aGRyYXcAAAAFAAAACQAAAAAAAAAAAAAAACNFk80AAAAJAAAAAAAAAGDr3rlti2+P1AAAABIAAAABJbT82FmuwvpjSEOMSJs8PBDJi20hvk/TyzDLaJU++XcAAAASAAAAAAAAAAA/QTZAlJz4YnEydNF+YwyudlleSeXwO9fWYARCUw9ItgAAAA0AAABBROSOJIpGEHWGwC9BHu0Pa412fK8sheSpUJctJRGTPRVkfpj98771fJVUNJlFqgQhcJC8B3l7PMz8XyHBQ0G7gwEAAAAAAAAAAAAAAQAAAAAAAAADAAAABgAAAAEltPzYWa7C+mNIQ4xImzw8EMmLbSG+T9PLMMtolT75dwAAABQAAAABAAAABgAAAAGXZfW4lXVkw3UNOcAwZyVUR4OdbqD9LX7Ttpqp5rWBCgAAABQAAAABAAAAB8x0rLVv0B71YLXUQ81Y/hHVrL7ODkABYS67MQIPyS+XAAAAAwAAAAAAAAAAP0E2QJSc+GJxMnTRfmMMrnZZXknl8DvX1mAEQlMPSLYAAAAGAAAAASW0/NhZrsL6Y0hDjEibPDwQyYttIb5P08swy2iVPvl3AAAAEAAAAAEAAAACAAAADwAAAAdCYWxhbmNlAAAAABIAAAABl2X1uJV1ZMN1DTnAMGclVEeDnW6g/S1+07aaqea1gQoAAAABAAAABgAAAAGXZfW4lXVkw3UNOcAwZyVUR4OdbqD9LX7Ttpqp5rWBCgAAABAAAAABAAAAAgAAAA8AAAANV2l0aGRyYXdOb25jZQAAAAAAAAkAAAAAAAAAYOveuW2Lb4/UAAAAAQBSClgAAADAAAACGAAAAAAAA/7cAAAAAVb4CZ0AAABAh5W9CMxNdeOyGeipks289GbH024KEl7l/mTlmDW2wVVRiR/DOA2bqf8YOzHebrYKOBcCvZi8Xof8sKRHEyV1Bw==',
result_xdr:
'AAAAAAADYnwAAAAAAAAAAQAAAAAAAAAYAAAAAD5exoUVFKIfjqtGDeDr9Pef8RxDqRRD3ewJzwkaKgziAAAAAA==',
result_meta_xdr:
'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',
fee_meta_xdr:
'AAAAAgAAAAMD0vPjAAAAAAAAAABvoRWhalyzq3GFzdiqjGcsLO5RoXIV+FP/k+EAVvgJnQAAAAAlIuASA7FPOQAAB+kAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAPS8+MAAAAAapDpmQAAAAAAAAABA9L1XwAAAAAAAAAAb6EVoWpcs6txhc3YqoxnLCzuUaFyFfhT/5PhAFb4CZ0AAAAAJR7g0gOxTzkAAAfpAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAD0vPjAAAAAGqQ6ZkAAAAA',
memo_type: 'none',
signatures: [
'h5W9CMxNdeOyGeipks289GbH024KEl7l/mTlmDW2wVVRiR/DOA2bqf8YOzHebrYKOBcCvZi8Xof8sKRHEyV1Bw==',
],
preconditions: {
timebounds: {
min_time: '0',
},
},
} as unknown as Horizon.ServerApi.TransactionRecord;

export const contractSwapReceiveUSDCTransactionResponse = {
_links: {
self: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions/c076b610a6c55ae8bb7f14ae9a913b82442baac4c9afe61762e6d67479217869',
},
account: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/accounts/GBX2CFNBNJOLHK3RQXG5RKUMM4WCZ3SRUFZBL6CT76J6CACW7AEZ3SHN',
},
ledger: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/ledgers/64236092',
},
operations: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions/c076b610a6c55ae8bb7f14ae9a913b82442baac4c9afe61762e6d67479217869/operations{?cursor,limit,order}',
templated: true,
},
effects: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions/c076b610a6c55ae8bb7f14ae9a913b82442baac4c9afe61762e6d67479217869/effects{?cursor,limit,order}',
templated: true,
},
precedes: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions?order=asc\u0026cursor=275891914363961344',
},
succeeds: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions?order=desc\u0026cursor=275891914363961344',
},
transaction: {
href: 'https://archive.stellar.validationcloud.io/v1/wd71cvymMEBizGDwPgpah1KH6Ao6kGP5lYpZewqWi2U/transactions/c076b610a6c55ae8bb7f14ae9a913b82442baac4c9afe61762e6d67479217869',
},
},
id: 'c076b610a6c55ae8bb7f14ae9a913b82442baac4c9afe61762e6d67479217869',
paging_token: '275891914363961344',
successful: true,
hash: 'c076b610a6c55ae8bb7f14ae9a913b82442baac4c9afe61762e6d67479217869',
ledger: 64236092,
created_at: '2026-09-02T07:27:39Z',
source_account: 'GBX2CFNBNJOLHK3RQXG5RKUMM4WCZ3SRUFZBL6CT76J6CACW7AEZ3SHN',
source_account_sequence: '266080959223302357',
fee_account: 'GBX2CFNBNJOLHK3RQXG5RKUMM4WCZ3SRUFZBL6CT76J6CACW7AEZ3SHN',
fee_charged: '222205',
max_fee: '762276',
operation_count: 1,
envelope_xdr:
'AAAAAgAAAABvoRWhalyzq3GFzdiqjGcsLO5RoXIV+FP/k+EAVvgJnQALoaQDsU85AAAI1QAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAGAAAAAAAAAABl2X1uJV1ZMN1DTnAMGclVEeDnW6g/S1+07aaqea1gQoAAAAId2l0aGRyYXcAAAAFAAAACQAAAAAAAAAAAAAAAAHDBxAAAAAJAAAAAAAAAGDyHYQ7zUJPrAAAABIAAAABre/OWa7lKWj3YGHUlMJSW3Vln6QpamX0me8p5WR35JYAAAASAAAAAAAAAAA/QTZAlJz4YnEydNF+YwyudlleSeXwO9fWYARCUw9ItgAAAA0AAABBfjHGB+REPo60ovPxVjS8eb0AqGzfHGTMyA6wPTvaOVt88M+e1crlSAiqb9OBOPgq6z6eaIAVbJALC7iZHymgrwEAAAAAAAAAAAAAAQAAAAAAAAADAAAABgAAAAGXZfW4lXVkw3UNOcAwZyVUR4OdbqD9LX7Ttpqp5rWBCgAAABQAAAABAAAABgAAAAGt785ZruUpaPdgYdSUwlJbdWWfpClqZfSZ7ynlZHfklgAAABQAAAABAAAAB8x0rLVv0B71YLXUQ81Y/hHVrL7ODkABYS67MQIPyS+XAAAAAwAAAAEAAAAAP0E2QJSc+GJxMnTRfmMMrnZZXknl8DvX1mAEQlMPSLYAAAABVVNEQwAAAAA7mRE4Dv6Yi6CokA6xz+RPNm99vpRr7QdyQPf2JN8VxQAAAAYAAAABl2X1uJV1ZMN1DTnAMGclVEeDnW6g/S1+07aaqea1gQoAAAAQAAAAAQAAAAIAAAAPAAAADVdpdGhkcmF3Tm9uY2UAAAAAAAAJAAAAAAAAAGDyHYQ7zUJPrAAAAAEAAAAGAAAAAa3vzlmu5Slo92Bh1JTCUlt1ZZ+kKWpl9JnvKeVkd+SWAAAAEAAAAAEAAAACAAAADwAAAAdCYWxhbmNlAAAAABIAAAABl2X1uJV1ZMN1DTnAMGclVEeDnW6g/S1+07aaqea1gQoAAAABAFJpQQAAAHQAAAHMAAAAAAAEAIQAAAABVvgJnQAAAEDoyzcNlloQIahqoLe9fe6WcagM+6KRVmfdNuskIA6jAQgCR76kaLK05VUiKSVCgfn15YfIWYEEm1WZJQvhZdAC',
result_xdr:
'AAAAAAADY/0AAAAAAAAAAQAAAAAAAAAYAAAAAMVpgkEn0Gzs9va0NuidPSc3BDqo2Uw3/wRpopyW42PXAAAAAA==',
result_meta_xdr:
'AAAABAAAAAAAAAACAAAAAwPUKjwAAAAAAAAAAG+hFaFqXLOrcYXN2KqMZyws7lGhchX4U/+T4QBW+AmdAAAAACIChjYDsU85AAAI1AAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAMAAAAAA9QmZgAAAABql7oRAAAAAAAAAAED1Co8AAAAAAAAAABvoRWhalyzq3GFzdiqjGcsLO5RoXIV+FP/k+EAVvgJnQAAAAAiAoY2A7FPOQAACNUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAPUKjwAAAAAapfP6wAAAAAAAAABAAAAAAAAAAYAAAADA9Qp3QAAAAYAAAAAAAAAAa3vzlmu5Slo92Bh1JTCUlt1ZZ+kKWpl9JnvKeVkd+SWAAAAEAAAAAEAAAACAAAADwAAAAdCYWxhbmNlAAAAABIAAAABl2X1uJV1ZMN1DTnAMGclVEeDnW6g/S1+07aaqea1gQoAAAABAAAAEQAAAAEAAAADAAAADwAAAAZhbW91bnQAAAAAAAoAAAAAAAAAAAAAJZ6OFahbAAAADwAAAAphdXRob3JpemVkAAAAAAAAAAAAAQAAAA8AAAAIY2xhd2JhY2sAAAAAAAAAAAAAAAAAAAABA9QqPAAAAAYAAAAAAAAAAa3vzlmu5Slo92Bh1JTCUlt1ZZ+kKWpl9JnvKeVkd+SWAAAAEAAAAAEAAAACAAAADwAAAAdCYWxhbmNlAAAAABIAAAABl2X1uJV1ZMN1DTnAMGclVEeDnW6g/S1+07aaqea1gQoAAAABAAAAEQAAAAEAAAADAAAADwAAAAZhbW91bnQAAAAAAAoAAAAAAAAAAAAAJZ6MUqFLAAAADwAAAAphdXRob3JpemVkAAAAAAAAAAAAAQAAAA8AAAAIY2xhd2JhY2sAAAAAAAAAAAAAAAAAAAAAA9QqPAAAAAmxr0PFipYOeHmwD+xXMdilq5AGi8seF2KEnetJ4fOH1APzzjsAAAAAAAAAAAPUKjwAAAAGAAAAAAAAAAGXZfW4lXVkw3UNOcAwZyVUR4OdbqD9LX7Ttpqp5rWBCgAAABAAAAABAAAAAgAAAA8AAAANV2l0aGRyYXdOb25jZQAAAAAAAAkAAAAAAAAAYPIdhDvNQk+sAAAAAQAAAAAAAAABAAAAAAAAAAMD1AICAAAAAQAAAAA/QTZAlJz4YnEydNF+YwyudlleSeXwO9fWYARCUw9ItgAAAAFVU0RDAAAAADuZETgO/piLoKiQDrHP5E82b32+lGvtB3JA9/Yk3xXFAAAAAAAAAAB//////////wAAAAEAAAAAAAAAAAAAAAED1Co8AAAAAQAAAAA/QTZAlJz4YnEydNF+YwyudlleSeXwO9fWYARCUw9ItgAAAAFVU0RDAAAAADuZETgO/piLoKiQDrHP5E82b32+lGvtB3JA9/Yk3xXFAAAAAAHDBxB//////////wAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAa3vzlmu5Slo92Bh1JTCUlt1ZZ+kKWpl9JnvKeVkd+SWAAAAAQAAAAAAAAAEAAAADwAAAAh0cmFuc2ZlcgAAABIAAAABl2X1uJV1ZMN1DTnAMGclVEeDnW6g/S1+07aaqea1gQoAAAASAAAAAAAAAAA/QTZAlJz4YnEydNF+YwyudlleSeXwO9fWYARCUw9ItgAAAA4AAAA9VVNEQzpHQTVaU0VKWUIzN0pSQzVBVkNJQTVNT1A0UkhUTTMzNVgyS0dYM0lIT0pBUFA1UkUzNEs0S1pWTgAAAAAAAAoAAAAAAAAAAAAAAAABwwcQAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAA==',
fee_meta_xdr:
'AAAAAgAAAAMD1CZmAAAAAAAAAABvoRWhalyzq3GFzdiqjGcsLO5RoXIV+FP/k+EAVvgJnQAAAAAiBoceA7FPOQAACNQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAPUJmYAAAAAape6EQAAAAAAAAABA9QqPAAAAAAAAAAAb6EVoWpcs6txhc3YqoxnLCzuUaFyFfhT/5PhAFb4CZ0AAAAAIgKGNgOxTzkAAAjUAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAD1CZmAAAAAGqXuhEAAAAA',
memo_type: 'none',
signatures: [
'6Ms3DZZaECGoaqC3vX3ulnGoDPuikVZn3TbrJCAOowEIAke+pGiytOVVIiklQoH59eWHyFmBBJtVmSUL4WXQAg==',
],
preconditions: {
timebounds: {
min_time: '0',
},
},
} as unknown as Horizon.ServerApi.TransactionRecord;
Loading