soroban-cli 26.0.0

Soroban CLI
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
use super::args;
use crate::color::gray;
use crate::{
    commands::global,
    config::network,
    rpc,
    xdr::{
        self, FeeBumpTransactionInnerTx, Hash, SorobanTransactionMetaExt, TransactionEnvelope,
        TransactionMeta, TransactionResult,
    },
};
use clap::Parser;
use serde::{Deserialize, Serialize};
use soroban_rpc::GetTransactionResponse;

#[derive(Parser, Debug, Clone)]
#[group(skip)]
pub struct Cmd {
    #[command(flatten)]
    args: args::Args,

    /// Output format for fee command
    #[arg(long, default_value = "table")]
    pub output: FeeOutputFormat,
}

#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, clap::ValueEnum, Default)]
pub enum FeeOutputFormat {
    /// JSON output of the ledger entry with parsed XDRs (one line, not formatted)
    Json,
    /// Formatted (multiline) JSON output of the ledger entry with parsed XDRs
    JsonFormatted,
    /// Formatted in a table comparing fee types
    #[default]
    Table,
}

#[derive(thiserror::Error, Debug)]
pub enum Error {
    #[error(transparent)]
    Network(#[from] network::Error),
    #[error(transparent)]
    Serde(#[from] serde_json::Error),
    #[error(transparent)]
    Xdr(#[from] xdr::Error),
    #[error(transparent)]
    Args(#[from] args::Error),
    #[error("{message}")]
    NotSupported { message: String },
    #[error("transaction {tx_hash} not found on {network} network")]
    NotFound { tx_hash: Hash, network: String },
    #[error(transparent)]
    Rpc(#[from] rpc::Error),
    #[error("{field} is None, expected it to be Some")]
    None { field: String },
}

const DEFAULT_RESOURCE_FEE: i64 = 0; // non-soroban txns do not have resource fees
const RESOURCE_FEE_TITLE: &str = "Resource Fee";

// proposed
const FEE_PROPOSED_TITLE: &str = "Fee Proposed";
const INCLUSION_FEE_TITLE: &str = "Inclusion Fee";
const NON_REFUNDABLE_TITLE: &str = "Non-Refundable";
const REFUNDABLE_TITLE: &str = "Refundable";
fn non_refundable_components() -> String {
    format!(
        "\n\n{}\n{}\n{}",
        gray("cpu instructions"),
        gray("storage read/write"),
        gray("tx size")
    )
}

fn refundable_components() -> String {
    format!(
        "\n\n{}\n{}\n{}",
        gray("return value"),
        gray("storage rent"),
        gray("events")
    )
}

//charged
const FEE_CHARGED_TITLE: &str = "Fee Charged";
const RESOURCE_FEE_CHARGED_TITLE: &str = "Resource Fee Charged";
const NON_REFUNDABLE_CHARGED_TITLE: &str = "Non-Refundable Charged";
const REFUNDABLE_CHARGED_TITLE: &str = "Refundable Charged";
const REFUNDED_TITLE: &str = "Refunded";
const INCLUSION_FEE_CHARGED_TITLE: &str = "Inclusion Fee Charged";

impl Cmd {
    pub async fn run(&self, global_args: &global::Args) -> Result<(), Error> {
        let resp = self.args.fetch_transaction(global_args).await?;
        let fee_table = FeeTable::new_from_transaction_response(&resp)?;
        match self.output {
            FeeOutputFormat::Json => {
                println!("{}", serde_json::to_string(&fee_table)?);
            }
            FeeOutputFormat::JsonFormatted => {
                args::Args::print_tx_summary(&resp);
                println!("{}", serde_json::to_string_pretty(&fee_table)?);
            }
            FeeOutputFormat::Table => {
                args::Args::print_tx_summary(&resp);
                fee_table.print();
            }
        }

        Ok(())
    }
}

#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub struct ProposedFees {
    pub fee: i64,
    pub resource_fee: i64,
    pub inclusion_fee: i64,
}

#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub struct ChargedFees {
    pub fee: i64,
    pub resource_fee: i64,
    pub inclusion_fee: i64,
    pub non_refundable_resource_fee: i64,
    pub refundable_resource_fee: i64,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct FeeTable {
    pub proposed: ProposedFees,
    pub charged: ChargedFees,
}

impl FeeTable {
    pub fn new_from_transaction_response(resp: &GetTransactionResponse) -> Result<Self, Error> {
        let (tx_result, tx_meta, tx_envelope) = Self::unpack_tx_response(resp)?;
        let proposed = Self::extract_proposed_fees(&tx_envelope);
        let charged = Self::extract_charged_fees(&tx_meta, &tx_result);

        Ok(FeeTable { proposed, charged })
    }

    fn unpack_tx_response(
        resp: &GetTransactionResponse,
    ) -> Result<(TransactionResult, TransactionMeta, TransactionEnvelope), Error> {
        let tx_result = resp.result.clone().ok_or(Error::None {
            field: "tx_result".to_string(),
        })?;
        let tx_meta = resp.result_meta.clone().ok_or(Error::None {
            field: "tx_meta".to_string(),
        })?;
        let tx_envelope = resp.envelope.clone().ok_or(Error::None {
            field: "tx_envelope".to_string(),
        })?;

        Ok((tx_result, tx_meta, tx_envelope))
    }

    fn extract_proposed_fees(tx_envelope: &TransactionEnvelope) -> ProposedFees {
        match tx_envelope {
            TransactionEnvelope::TxV0(transaction_v0_envelope) => {
                let fee: i64 = transaction_v0_envelope.tx.fee.into();
                ProposedFees {
                    fee,
                    resource_fee: DEFAULT_RESOURCE_FEE,
                    inclusion_fee: fee - DEFAULT_RESOURCE_FEE,
                }
            }
            TransactionEnvelope::Tx(transaction_v1_envelope) => {
                let tx = transaction_v1_envelope.tx.clone();
                let fee: i64 = tx.fee.into();
                let resource_fee = match tx.ext {
                    xdr::TransactionExt::V0 => DEFAULT_RESOURCE_FEE,
                    xdr::TransactionExt::V1(soroban_transaction_data) => {
                        soroban_transaction_data.resource_fee
                    }
                };
                ProposedFees {
                    fee,
                    resource_fee,
                    inclusion_fee: fee - resource_fee,
                }
            }
            TransactionEnvelope::TxFeeBump(fee_bump_transaction_envelope) => {
                let inner_tx_resource_fee = match &fee_bump_transaction_envelope.tx.inner_tx {
                    FeeBumpTransactionInnerTx::Tx(tx_v1_envelope) => match &tx_v1_envelope.tx.ext {
                        xdr::TransactionExt::V0 => DEFAULT_RESOURCE_FEE,
                        xdr::TransactionExt::V1(soroban_transaction_data) => {
                            soroban_transaction_data.resource_fee
                        }
                    },
                };
                // the is the top level fee bump tx fee
                let fee = fee_bump_transaction_envelope.tx.fee;

                ProposedFees {
                    fee,
                    resource_fee: inner_tx_resource_fee,
                    inclusion_fee: fee - inner_tx_resource_fee,
                }
            }
        }
    }

    fn extract_charged_fees(
        tx_meta: &TransactionMeta,
        tx_result: &TransactionResult,
    ) -> ChargedFees {
        let fee = tx_result.fee_charged;
        let (non_refundable_resource_fee, refundable_resource_fee) =
            Self::resource_fees_charged(tx_meta);
        let resource_fee = non_refundable_resource_fee + refundable_resource_fee;

        ChargedFees {
            fee,
            resource_fee,
            inclusion_fee: fee - resource_fee,
            non_refundable_resource_fee,
            refundable_resource_fee,
        }
    }

    fn resource_fees_charged(tx_meta: &TransactionMeta) -> (i64, i64) {
        let (non_refundable_resource_fee_charged, refundable_resource_fee_charged) =
            match tx_meta.clone() {
                TransactionMeta::V0(_) | TransactionMeta::V1(_) | TransactionMeta::V2(_) => {
                    (DEFAULT_RESOURCE_FEE, DEFAULT_RESOURCE_FEE)
                }
                TransactionMeta::V3(meta) => {
                    if let Some(soroban_meta) = meta.soroban_meta {
                        match soroban_meta.ext {
                            SorobanTransactionMetaExt::V0 => {
                                (DEFAULT_RESOURCE_FEE, DEFAULT_RESOURCE_FEE)
                            }
                            SorobanTransactionMetaExt::V1(v1) => (
                                v1.total_non_refundable_resource_fee_charged,
                                v1.total_refundable_resource_fee_charged,
                            ),
                        }
                    } else {
                        (DEFAULT_RESOURCE_FEE, DEFAULT_RESOURCE_FEE)
                    }
                }
                TransactionMeta::V4(meta) => {
                    if let Some(soroban_meta) = meta.soroban_meta {
                        match soroban_meta.ext {
                            SorobanTransactionMetaExt::V0 => {
                                (DEFAULT_RESOURCE_FEE, DEFAULT_RESOURCE_FEE)
                            }
                            SorobanTransactionMetaExt::V1(v1) => (
                                v1.total_non_refundable_resource_fee_charged,
                                v1.total_refundable_resource_fee_charged,
                            ),
                        }
                    } else {
                        (DEFAULT_RESOURCE_FEE, DEFAULT_RESOURCE_FEE)
                    }
                }
            };

        (
            non_refundable_resource_fee_charged,
            refundable_resource_fee_charged,
        )
    }

    fn should_include_resource_fees(&self) -> bool {
        self.charged.resource_fee != 0 || self.proposed.resource_fee != 0
    }

    fn estimated_refunded_resource_fee(&self) -> i64 {
        self.proposed.resource_fee - self.charged.non_refundable_resource_fee
    }

    fn refunded(&self) -> i64 {
        self.proposed.fee - self.charged.fee
    }

    pub fn table(&self) -> String {
        let mut rows = self.proposed_rows();
        rows.push(vec![("👆 Proposed Fee  👇 Final Fee".to_string(), 4, true)]);
        rows.extend(self.charged_rows());
        render_span_table(&rows, 4)
    }

    fn proposed_rows(&self) -> Vec<Vec<(String, usize, bool)>> {
        vec![
            vec![(
                format!("{FEE_PROPOSED_TITLE}: {}", self.proposed.fee),
                4,
                false,
            )],
            vec![
                (
                    format!("{INCLUSION_FEE_TITLE}: {}", self.proposed.inclusion_fee),
                    1,
                    false,
                ),
                (
                    format!("{RESOURCE_FEE_TITLE}: {}", self.proposed.resource_fee),
                    3,
                    false,
                ),
            ],
            vec![
                (
                    format!("{INCLUSION_FEE_TITLE}: {}", self.proposed.inclusion_fee),
                    1,
                    false,
                ),
                (
                    format!(
                        "{NON_REFUNDABLE_TITLE}: {}{}",
                        self.charged.non_refundable_resource_fee,
                        non_refundable_components()
                    ),
                    1,
                    false,
                ),
                (
                    format!(
                        "{REFUNDABLE_TITLE}: {}{}",
                        self.estimated_refunded_resource_fee(),
                        refundable_components()
                    ),
                    2,
                    false,
                ),
            ],
        ]
    }

    fn charged_rows(&self) -> Vec<Vec<(String, usize, bool)>> {
        let refunded = format!("{REFUNDED_TITLE}: {}", self.refunded());
        let mut rows = Vec::new();
        if self.should_include_resource_fees() {
            rows.push(vec![
                (
                    format!(
                        "{INCLUSION_FEE_CHARGED_TITLE}: {}",
                        self.charged.inclusion_fee
                    ),
                    1,
                    false,
                ),
                (
                    format!(
                        "{NON_REFUNDABLE_CHARGED_TITLE}: {}",
                        self.charged.non_refundable_resource_fee
                    ),
                    1,
                    false,
                ),
                (
                    format!(
                        "{REFUNDABLE_CHARGED_TITLE}: {}",
                        self.charged.refundable_resource_fee
                    ),
                    1,
                    false,
                ),
                (refunded.clone(), 1, false),
            ]);
            rows.push(vec![
                (
                    format!(
                        "{INCLUSION_FEE_CHARGED_TITLE}: {}",
                        self.charged.inclusion_fee
                    ),
                    1,
                    false,
                ),
                (
                    format!(
                        "{RESOURCE_FEE_CHARGED_TITLE}: {}",
                        self.charged.resource_fee
                    ),
                    2,
                    false,
                ),
                (refunded.clone(), 1, false),
            ]);
        }
        rows.push(vec![
            (
                format!("{FEE_CHARGED_TITLE}: {}", self.charged.fee),
                3,
                false,
            ),
            (refunded, 1, false),
        ]);
        rows
    }

    pub fn print(&self) {
        print!("{}", self.table());
    }
}

// Each row is a list of (content, col_span, centered).
// All rows share the same n_cols logical columns.
fn render_span_table(rows: &[Vec<(String, usize, bool)>], n_cols: usize) -> String {
    const PAD: usize = 1;

    let widths = span_col_widths(rows, n_cols, PAD);
    let inner: usize = widths.iter().sum::<usize>() + (n_cols - 1);

    let border = |l: char, r: char| format!("{l}{}{r}\n", "─".repeat(inner));

    let mut out = border('┌', '┐');

    for (i, row) in rows.iter().enumerate() {
        let cells: Vec<(Vec<&str>, usize, bool)> = row
            .iter()
            .map(|(s, span, c)| (s.lines().collect(), *span, *c))
            .collect();

        let height = cells.iter().map(|(ls, _, _)| ls.len()).max().unwrap_or(1);

        for line_i in 0..height {
            out.push('│');
            let mut col = 0;
            for (lines, span, centered) in &cells {
                let cw: usize = widths[col..col + span].iter().sum::<usize>() + span - 1;
                let text = lines.get(line_i).copied().unwrap_or("");
                let tw = str_display_width(text);

                if *centered {
                    let space = cw.saturating_sub(tw + 2 * PAD);
                    let lpad = PAD + space / 2;
                    let rpad = cw.saturating_sub(lpad + tw);
                    out.push_str(&" ".repeat(lpad));
                    out.push_str(text);
                    out.push_str(&" ".repeat(rpad));
                } else {
                    out.push(' ');
                    out.push_str(text);
                    out.push_str(&" ".repeat(cw.saturating_sub(1 + tw)));
                }

                col += span;
                if col < n_cols {
                    out.push('│');
                }
            }
            out.push_str("│\n");
        }

        let (l, r) = if i == rows.len() - 1 {
            ('└', '┘')
        } else {
            ('├', '┤')
        };
        out.push_str(&border(l, r));
    }

    out
}

fn span_col_widths(rows: &[Vec<(String, usize, bool)>], n_cols: usize, pad: usize) -> Vec<usize> {
    let mut widths = vec![0usize; n_cols];

    // First pass: single-column cells set minimum widths.
    for row in rows {
        let mut col = 0;
        for (content, span, _) in row {
            if *span == 1 {
                let w = content.lines().map(str_display_width).max().unwrap_or(0);
                widths[col] = widths[col].max(w + 2 * pad);
            }
            col += span;
        }
    }

    // Second pass: spanning cells expand the last column in their span if needed.
    for row in rows {
        let mut col = 0;
        for (content, span, _) in row {
            if *span > 1 && col + span <= n_cols {
                let available: usize = widths[col..col + span].iter().sum::<usize>() + span - 1;
                let needed = content.lines().map(str_display_width).max().unwrap_or(0) + 2 * pad;
                if needed > available {
                    widths[col + span - 1] += needed - available;
                }
            }
            col += span;
        }
    }

    widths
}

// Returns the display width of a string, counting wide chars (emoji, CJK) as 2
// and skipping ANSI escape sequences.
fn str_display_width(s: &str) -> usize {
    let mut width = 0;
    let mut chars = s.chars();
    while let Some(c) = chars.next() {
        if c == '\x1b' {
            for c2 in chars.by_ref() {
                if c2 == 'm' {
                    break;
                }
            }
        } else {
            width += match c as u32 {
                0x1100..=0x115F
                | 0x2E80..=0x303F
                | 0x3041..=0x33FF
                | 0xFF00..=0xFF60
                | 0xFFE0..=0xFFE6
                | 0x1F000..=0x1FFFF => 2,
                _ => 1,
            };
        }
    }
    width
}

#[cfg(test)]
mod test {
    use soroban_rpc::GetTransactionResponse;

    use super::*;

    #[test]
    fn soroban_tx() {
        let resp = soroban_tx_response().unwrap();
        let fee_table = FeeTable::new_from_transaction_response(&resp).unwrap();

        let proposed_fee = 105_447;
        let proposed_resource_fee = 105_347;
        let expected_proposed_fees = ProposedFees {
            fee: proposed_fee,
            resource_fee: proposed_resource_fee,
            inclusion_fee: proposed_fee - proposed_resource_fee,
        };
        assert_eq!(fee_table.proposed, expected_proposed_fees);

        let charged_fee = 60_537;
        let non_refundable_resource_fee_charged = 60_358;
        let refundable_resource_fee_charged = 79;
        let full_resource_fee_charged =
            non_refundable_resource_fee_charged + refundable_resource_fee_charged;
        let inclusion_fee_charged = charged_fee - full_resource_fee_charged;
        let expected_charged_fees = ChargedFees {
            fee: charged_fee,
            resource_fee: full_resource_fee_charged,
            inclusion_fee: inclusion_fee_charged,
            non_refundable_resource_fee: non_refundable_resource_fee_charged,
            refundable_resource_fee: refundable_resource_fee_charged,
        };
        assert_eq!(fee_table.charged, expected_charged_fees);

        assert!(fee_table.should_include_resource_fees());

        let expected_estimated_refund = proposed_resource_fee - non_refundable_resource_fee_charged;
        assert_eq!(
            fee_table.estimated_refunded_resource_fee(),
            expected_estimated_refund
        );

        let refund = proposed_fee - charged_fee;
        assert_eq!(fee_table.refunded(), refund);
    }

    #[test]
    fn classic_tx() {
        let resp = classic_tx_response().unwrap();
        let fee_table = FeeTable::new_from_transaction_response(&resp).unwrap();

        let proposed_fee = 100;
        let proposed_resource_fee = DEFAULT_RESOURCE_FEE;
        let expected_proposed_fees = ProposedFees {
            fee: proposed_fee,
            resource_fee: proposed_resource_fee,
            inclusion_fee: proposed_fee - proposed_resource_fee,
        };
        assert_eq!(fee_table.proposed, expected_proposed_fees);

        let charged_fee = 100;
        let non_refundable_resource_fee_charged = DEFAULT_RESOURCE_FEE;
        let refundable_resource_fee_charged = DEFAULT_RESOURCE_FEE;
        let full_resource_fee_charged =
            non_refundable_resource_fee_charged + refundable_resource_fee_charged;
        let inclusion_fee_charged = charged_fee - full_resource_fee_charged;
        let expected_charged_fees = ChargedFees {
            fee: charged_fee,
            resource_fee: full_resource_fee_charged,
            inclusion_fee: inclusion_fee_charged,
            non_refundable_resource_fee: non_refundable_resource_fee_charged,
            refundable_resource_fee: refundable_resource_fee_charged,
        };
        assert_eq!(fee_table.charged, expected_charged_fees);

        assert!(!fee_table.should_include_resource_fees());
    }

    #[test]
    fn fee_bump_wrapping_classic_tx() {
        let resp = fee_bump_wrapping_classic_tx_response().unwrap();
        let fee_table = FeeTable::new_from_transaction_response(&resp).unwrap();

        let proposed_fee = 400;
        let proposed_resource_fee = DEFAULT_RESOURCE_FEE;
        let expected_proposed_fees = ProposedFees {
            fee: proposed_fee,
            resource_fee: proposed_resource_fee,
            inclusion_fee: proposed_fee - proposed_resource_fee,
        };
        assert_eq!(fee_table.proposed, expected_proposed_fees);

        let charged_fee = 200;
        let non_refundable_resource_fee_charged = DEFAULT_RESOURCE_FEE;
        let refundable_resource_fee_charged = DEFAULT_RESOURCE_FEE;
        let full_resource_fee_charged =
            non_refundable_resource_fee_charged + refundable_resource_fee_charged;
        let inclusion_fee_charged = charged_fee - full_resource_fee_charged;
        let expected_charged_fees = ChargedFees {
            fee: charged_fee,
            resource_fee: full_resource_fee_charged,
            inclusion_fee: inclusion_fee_charged,
            non_refundable_resource_fee: non_refundable_resource_fee_charged,
            refundable_resource_fee: refundable_resource_fee_charged,
        };
        assert_eq!(fee_table.charged, expected_charged_fees);

        assert!(!fee_table.should_include_resource_fees());
    }

    #[test]
    fn fee_bump_wrapping_soroban_tx() {
        let resp = fee_bump_wrapping_soroban_tx_response().unwrap();
        let fee_table = FeeTable::new_from_transaction_response(&resp).unwrap();

        let proposed_fee = 10_208_876;
        let proposed_inner_tx_resource_fee = 5_004_438;
        let expected_proposed_fees = ProposedFees {
            fee: proposed_fee,
            resource_fee: proposed_inner_tx_resource_fee,
            inclusion_fee: proposed_fee - proposed_inner_tx_resource_fee,
        };
        assert_eq!(fee_table.proposed, expected_proposed_fees);

        let charged_fee = 3_603_030;
        let non_refundable_resource_fee_charged = 285_226;
        let refundable_resource_fee_charged = 3_317_604;
        let full_resource_fee_charged =
            non_refundable_resource_fee_charged + refundable_resource_fee_charged;
        let inclusion_fee_charged = charged_fee - full_resource_fee_charged;
        let expected_charged_fees = ChargedFees {
            fee: charged_fee,
            resource_fee: full_resource_fee_charged,
            inclusion_fee: inclusion_fee_charged,
            non_refundable_resource_fee: non_refundable_resource_fee_charged,
            refundable_resource_fee: refundable_resource_fee_charged,
        };
        assert_eq!(fee_table.charged, expected_charged_fees);

        assert!(fee_table.should_include_resource_fees());
    }

    fn soroban_tx_response() -> Result<GetTransactionResponse, serde_json::Error> {
        serde_json::from_str(SOROBAN_TX_RESPONSE)
    }

    fn classic_tx_response() -> Result<GetTransactionResponse, serde_json::Error> {
        serde_json::from_str(CLASSIC_TX_RESPONSE)
    }

    fn fee_bump_wrapping_classic_tx_response() -> Result<GetTransactionResponse, serde_json::Error>
    {
        serde_json::from_str(FEE_BUMP_WRAPPING_CLASSIC_TX_RESPONSE)
    }

    fn fee_bump_wrapping_soroban_tx_response() -> Result<GetTransactionResponse, serde_json::Error>
    {
        serde_json::from_str(FEE_BUMP_WRAPPING_SOROBAN_TX_RESPONSE)
    }

    const SOROBAN_TX_RESPONSE: &str = r#"{"status":"SUCCESS","envelope":{"tx":{"tx":{"source_account":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","fee":105447,"seq_num":"2062499130114054","cond":"none","memo":"none","operations":[{"source_account":null,"body":{"invoke_host_function":{"host_function":{"invoke_contract":{"contract_address":"CCFNZO33IO6GDTPLWWRJ5F34UBXEBOSYGSQJJGVLAJNNULU26CRZR6TM","function_name":"inc","args":[]}},"auth":[]}}}],"ext":{"v1":{"ext":"v0","resources":{"footprint":{"read_only":[{"contract_data":{"contract":"CCFNZO33IO6GDTPLWWRJ5F34UBXEBOSYGSQJJGVLAJNNULU26CRZR6TM","key":"ledger_key_contract_instance","durability":"persistent"}},{"contract_code":{"hash":"2a41e16cb574fc372ee81f02c1d775365d9d39002cc630bd162a4dcaeb153161"}}],"read_write":[{"contract_data":{"contract":"CCFNZO33IO6GDTPLWWRJ5F34UBXEBOSYGSQJJGVLAJNNULU26CRZR6TM","key":{"symbol":"COUNTER"},"durability":"persistent"}}]},"instructions":2099865,"disk_read_bytes":8008,"write_bytes":80},"resource_fee":"105347"}}},"signatures":[{"hint":"6ca1bdc0","signature":"b8120310a5db9b5fd295f00d9fd7ebc26e34d14b27a00a5827aa89a18027fb7d69fb1b11e3b6408885602627b228256fde049aee2045fea7d088327302e4ea04"}]}},"result":{"fee_charged":"60537","result":{"tx_success":[{"op_inner":{"invoke_host_function":{"success":"e18456c437deb4d21dceee8db938ac8bcea25405af8df02d9225104e5d53e185"}}}]},"ext":"v0"},"result_meta":{"v3":{"ext":"v0","tx_changes_before":[{"state":{"last_modified_ledger_seq":480745,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"99907097552","seq_num":"2062499130114053","num_sub_entries":1,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":480418,"seq_time":"1752671669"}}}}}}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":480745,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"99907097552","seq_num":"2062499130114054","num_sub_entries":1,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":480745,"seq_time":"1752673305"}}}}}}}},"ext":"v0"}}],"operations":[{"changes":[{"state":{"last_modified_ledger_seq":480290,"data":{"contract_data":{"ext":"v0","contract":"CCFNZO33IO6GDTPLWWRJ5F34UBXEBOSYGSQJJGVLAJNNULU26CRZR6TM","key":{"symbol":"COUNTER"},"durability":"persistent","val":{"u32":2}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":480745,"data":{"contract_data":{"ext":"v0","contract":"CCFNZO33IO6GDTPLWWRJ5F34UBXEBOSYGSQJJGVLAJNNULU26CRZR6TM","key":{"symbol":"COUNTER"},"durability":"persistent","val":{"u32":3}}},"ext":"v0"}}]}],"tx_changes_after":[{"state":{"last_modified_ledger_seq":480745,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"99907097552","seq_num":"2062499130114054","num_sub_entries":1,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":480745,"seq_time":"1752673305"}}}}}}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":480745,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"99907142462","seq_num":"2062499130114054","num_sub_entries":1,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":480745,"seq_time":"1752673305"}}}}}}}},"ext":"v0"}}],"soroban_meta":{"ext":{"v1":{"ext":"v0","total_non_refundable_resource_fee_charged":"60358","total_refundable_resource_fee_charged":"79","rent_fee_charged":"0"}},"events":[],"return_value":{"u32":3},"diagnostic_events":[{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_call"},{"bytes":"8adcbb7b43bc61cdebb5a29e977ca06e40ba5834a0949aab025ada2e9af0a398"},{"symbol":"inc"}],"data":"void"}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CCFNZO33IO6GDTPLWWRJ5F34UBXEBOSYGSQJJGVLAJNNULU26CRZR6TM","type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"log"}],"data":{"vec":[{"string":"count: {}"},{"u32":2}]}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CCFNZO33IO6GDTPLWWRJ5F34UBXEBOSYGSQJJGVLAJNNULU26CRZR6TM","type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_return"},{"symbol":"inc"}],"data":{"u32":3}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_entry"}],"data":{"u64":"6"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_entry"}],"data":{"u64":"1"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"ledger_read_byte"}],"data":{"u64":"8008"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"ledger_write_byte"}],"data":{"u64":"80"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_key_byte"}],"data":{"u64":"144"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_key_byte"}],"data":{"u64":"0"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_data_byte"}],"data":{"u64":"184"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_data_byte"}],"data":{"u64":"80"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_code_byte"}],"data":{"u64":"7824"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_code_byte"}],"data":{"u64":"0"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"emit_event"}],"data":{"u64":"0"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"emit_event_byte"}],"data":{"u64":"8"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"cpu_insn"}],"data":{"u64":"2006689"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"mem_byte"}],"data":{"u64":"1492062"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"invoke_time_nsecs"}],"data":{"u64":"561706"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_key_byte"}],"data":{"u64":"60"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_data_byte"}],"data":{"u64":"104"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_code_byte"}],"data":{"u64":"7824"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_emit_event_byte"}],"data":{"u64":"0"}}}}}]}}},"events":{"contract_events":[],"diagnostic_events":[{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_call"},{"bytes":"8adcbb7b43bc61cdebb5a29e977ca06e40ba5834a0949aab025ada2e9af0a398"},{"symbol":"inc"}],"data":"void"}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CCFNZO33IO6GDTPLWWRJ5F34UBXEBOSYGSQJJGVLAJNNULU26CRZR6TM","type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"log"}],"data":{"vec":[{"string":"count: {}"},{"u32":2}]}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CCFNZO33IO6GDTPLWWRJ5F34UBXEBOSYGSQJJGVLAJNNULU26CRZR6TM","type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_return"},{"symbol":"inc"}],"data":{"u32":3}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_entry"}],"data":{"u64":"6"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_entry"}],"data":{"u64":"1"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"ledger_read_byte"}],"data":{"u64":"8008"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"ledger_write_byte"}],"data":{"u64":"80"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_key_byte"}],"data":{"u64":"144"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_key_byte"}],"data":{"u64":"0"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_data_byte"}],"data":{"u64":"184"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_data_byte"}],"data":{"u64":"80"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_code_byte"}],"data":{"u64":"7824"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_code_byte"}],"data":{"u64":"0"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"emit_event"}],"data":{"u64":"0"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"emit_event_byte"}],"data":{"u64":"8"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"cpu_insn"}],"data":{"u64":"2006689"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"mem_byte"}],"data":{"u64":"1492062"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"invoke_time_nsecs"}],"data":{"u64":"561706"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_key_byte"}],"data":{"u64":"60"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_data_byte"}],"data":{"u64":"104"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_code_byte"}],"data":{"u64":"7824"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_emit_event_byte"}],"data":{"u64":"0"}}}}}],"transaction_events":[]}}"#;

    const CLASSIC_TX_RESPONSE: &str = r#"{"status":"SUCCESS","envelope":{"tx":{"tx":{"source_account":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","fee":100,"seq_num":"2062499130114053","cond":"none","memo":"none","operations":[{"source_account":null,"body":{"manage_data":{"data_name":"test","data_value":"abcdef"}}}],"ext":"v0"},"signatures":[{"hint":"6ca1bdc0","signature":"a12761eee624d0a15f731b6e63201c55978d714a28d167e80441092afb11a06549056199e589ff511d376299782cde796169a1781b7ecad93cbe68ac3a768d05"}]}},"result":{"fee_charged":"100","result":{"tx_success":[{"op_inner":{"manage_data":"success"}}]},"ext":"v0"},"result_meta":{"v3":{"ext":"v0","tx_changes_before":[{"state":{"last_modified_ledger_seq":480418,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"99907202999","seq_num":"2062499130114052","num_sub_entries":0,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":480290,"seq_time":"1752671028"}}}}}}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":480418,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"99907202999","seq_num":"2062499130114053","num_sub_entries":0,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":480418,"seq_time":"1752671669"}}}}}}}},"ext":"v0"}}],"operations":[{"changes":[{"created":{"last_modified_ledger_seq":480418,"data":{"data":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","data_name":"test","data_value":"abcdef","ext":"v0"}},"ext":"v0"}},{"state":{"last_modified_ledger_seq":480418,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"99907202999","seq_num":"2062499130114053","num_sub_entries":0,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":480418,"seq_time":"1752671669"}}}}}}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":480418,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"99907202999","seq_num":"2062499130114053","num_sub_entries":1,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":480418,"seq_time":"1752671669"}}}}}}}},"ext":"v0"}}]}],"tx_changes_after":[],"soroban_meta":null}},"events":{"contract_events":[],"diagnostic_events":[],"transaction_events":[]}}"#;

    const FEE_BUMP_WRAPPING_CLASSIC_TX_RESPONSE: &str = r#"{"status":"SUCCESS","envelope":{"tx_fee_bump":{"tx":{"fee_source":"GD5EJEGJM5PWKZ4WBJFMTHHY3VNUDJDU55N24ODPIPNYKBRRJCCIA44P","fee":"400","inner_tx":{"tx":{"tx":{"source_account":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","fee":100,"seq_num":"2062499130114055","cond":{"time":{"min_time":"0","max_time":"1752675654"}},"memo":"none","operations":[{"source_account":null,"body":{"payment":{"destination":"GDBFMEGF2EVTNISNTYVOOYGXAEP5A353YJCPDRGUH3L6GMIDATR4BWY6","asset":"native","amount":"100000000"}}}],"ext":"v0"},"signatures":[{"hint":"6ca1bdc0","signature":"ce5f19bac1e1a57f6f54a7d4f5729fd2db8755dac425fd61220111e3d4436dfd52e9f0f0098ea0c07fc3e65c69f19f7d1f440adc7fa9937662bd9268fb7cb00c"}]}},"ext":"v0"},"signatures":[{"hint":"31488480","signature":"789b8261c481532c7f8933ed1b32d9fb270d9acc044774dda1986f20aba8248592975f25eec1aabe374978fcc10a19b9797c834d686465a4d225b01d0c57020e"}]}},"result":{"fee_charged":"200","result":{"tx_fee_bump_inner_success":{"transaction_hash":"b6b9591c8c00d1aa9212ef0345e6b1ccd56f9a362e463a1f6237423d09dbcab8","result":{"fee_charged":"100","result":{"tx_success":[{"op_inner":{"payment":"success"}}]},"ext":"v0"}}},"ext":"v0"},"result_meta":{"v3":{"ext":"v0","tx_changes_before":[{"state":{"last_modified_ledger_seq":481209,"data":{"account":{"account_id":"GD5EJEGJM5PWKZ4WBJFMTHHY3VNUDJDU55N24ODPIPNYKBRRJCCIA44P","balance":"99999999800","seq_num":"2065887859310592","num_sub_entries":0,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":"v0"}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":481209,"data":{"account":{"account_id":"GD5EJEGJM5PWKZ4WBJFMTHHY3VNUDJDU55N24ODPIPNYKBRRJCCIA44P","balance":"99999999800","seq_num":"2065887859310592","num_sub_entries":0,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":"v0"}},"ext":"v0"}},{"state":{"last_modified_ledger_seq":481027,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"199907142462","seq_num":"2062499130114054","num_sub_entries":1,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":480745,"seq_time":"1752673305"}}}}}}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":481209,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"199907142462","seq_num":"2062499130114055","num_sub_entries":1,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":481209,"seq_time":"1752675627"}}}}}}}},"ext":"v0"}}],"operations":[{"changes":[{"state":{"last_modified_ledger_seq":481209,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"199907142462","seq_num":"2062499130114055","num_sub_entries":1,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":481209,"seq_time":"1752675627"}}}}}}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":481209,"data":{"account":{"account_id":"GDWREJ5HETNIDTQKXJZPA6LRSJMFUCO4T2DFEJYSZ2XVWRTMUG64AL4B","balance":"199807142462","seq_num":"2062499130114055","num_sub_entries":1,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":0,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":481209,"seq_time":"1752675627"}}}}}}}},"ext":"v0"}},{"state":{"last_modified_ledger_seq":481014,"data":{"account":{"account_id":"GDBFMEGF2EVTNISNTYVOOYGXAEP5A353YJCPDRGUH3L6GMIDATR4BWY6","balance":"100000000000","seq_num":"2065939398918144","num_sub_entries":0,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":"v0"}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":481209,"data":{"account":{"account_id":"GDBFMEGF2EVTNISNTYVOOYGXAEP5A353YJCPDRGUH3L6GMIDATR4BWY6","balance":"100100000000","seq_num":"2065939398918144","num_sub_entries":0,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":"v0"}},"ext":"v0"}}]}],"tx_changes_after":[],"soroban_meta":null}},"events":{"contract_events":[],"diagnostic_events":[],"transaction_events":[]}}"#;

    const FEE_BUMP_WRAPPING_SOROBAN_TX_RESPONSE: &str = r#"{"status":"SUCCESS","envelope":{"tx_fee_bump":{"tx":{"fee_source":"GDJLH2F7DBI6GC22J7YUTPAEFRSWKG5MN5RSE2GOOYUTO4BH66LHENRW","fee":"10208876","inner_tx":{"tx":{"tx":{"source_account":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK","fee":5004538,"seq_num":"244204891193475075","cond":"none","memo":"none","operations":[{"source_account":null,"body":{"invoke_host_function":{"host_function":{"invoke_contract":{"contract_address":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","function_name":"submit","args":[{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"vec":[{"map":[{"key":{"symbol":"address"},"val":{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"}},{"key":{"symbol":"amount"},"val":{"i128":"10000990"}},{"key":{"symbol":"request_type"},"val":{"u32":3}}]}]}]}},"auth":[{"credentials":"source_account","root_invocation":{"function":{"contract_fn":{"contract_address":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","function_name":"submit","args":[{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"vec":[{"map":[{"key":{"symbol":"address"},"val":{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"}},{"key":{"symbol":"amount"},"val":{"i128":"10000990"}},{"key":{"symbol":"request_type"},"val":{"u32":3}}]}]}]}},"sub_invocations":[]}}]}}}],"ext":{"v1":{"ext":"v0","resources":{"footprint":{"read_only":[{"contract_data":{"contract":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75","key":"ledger_key_contract_instance","durability":"persistent"}},{"contract_data":{"contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"EmisConfig"},{"u32":3}]},"durability":"persistent"}},{"contract_data":{"contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"EmisData"},{"u32":3}]},"durability":"persistent"}},{"contract_data":{"contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"ResConfig"},{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"}]},"durability":"persistent"}},{"contract_data":{"contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":"ledger_key_contract_instance","durability":"persistent"}},{"contract_code":{"hash":"baf978f10efdbcd85747868bef8832845ea6809f7643b67a4ac0cd669327fc2c"}}],"read_write":[{"trustline":{"account_id":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK","asset":{"credit_alphanum4":{"asset_code":"USDC","issuer":"GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN"}}}},{"contract_data":{"contract":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75","key":{"vec":[{"symbol":"Balance"},{"address":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP"}]},"durability":"persistent"}},{"contract_data":{"contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"Positions"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"}]},"durability":"persistent"}},{"contract_data":{"contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"ResData"},{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"}]},"durability":"persistent"}},{"contract_data":{"contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"UserEmis"},{"map":[{"key":{"symbol":"reserve_id"},"val":{"u32":3}},{"key":{"symbol":"user"},"val":{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"}}]}]},"durability":"persistent"}}]},"instructions":9237256,"disk_read_bytes":53060,"write_bytes":1276},"resource_fee":"5004438"}}},"signatures":[{"hint":"f291f849","signature":"3cc2da7de9df730b23ffa8a26ddfe180aa4b8eef3e251c6f05972984a659a729f1cea6396c806cce57dc66d070e588708021dfd6dc510454355bd9ce3be55500"}]}},"ext":"v0"},"signatures":[{"hint":"27f79672","signature":"f5985e8d0d8d1acc1e9862418ad09da9ec9607327362a887ee8fd805d362bcd97dee470c8f604cf5e4acbf161be4e79ece729333ba39f126d64781ecbe763202"}]}},"result":{"fee_charged":"3603030","result":{"tx_fee_bump_inner_success":{"transaction_hash":"0d2bdcf1532b215a81730267d6a7cd444127b19bdb435a568543890951a95d78","result":{"fee_charged":"3602930","result":{"tx_success":[{"op_inner":{"invoke_host_function":{"success":"1437b07cfee492dc5c26ccebe96fcab3c8a96b9a0e29d2b804095d6cc8e2f89d"}}}]},"ext":"v0"}}},"ext":"v0"},"result_meta":{"v3":{"ext":"v0","tx_changes_before":[{"state":{"last_modified_ledger_seq":58166971,"data":{"account":{"account_id":"GDJLH2F7DBI6GC22J7YUTPAEFRSWKG5MN5RSE2GOOYUTO4BH66LHENRW","balance":"22097264303","seq_num":"181263292226863151","num_sub_entries":4,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":2,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":56604244,"seq_time":"1744587782"}}}}}}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":58166971,"data":{"account":{"account_id":"GDJLH2F7DBI6GC22J7YUTPAEFRSWKG5MN5RSE2GOOYUTO4BH66LHENRW","balance":"22097264303","seq_num":"181263292226863151","num_sub_entries":4,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":2,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":56604244,"seq_time":"1744587782"}}}}}}}},"ext":"v0"}},{"state":{"last_modified_ledger_seq":56858638,"data":{"account":{"account_id":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK","balance":"0","seq_num":"244204891193475074","num_sub_entries":4,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"00141414","signers":[{"key":"GCO6RBY3BSJ77Y77TUXV2O5AV5E5WHAKRVMFDBHHX4H4KSKPVMICFKT4","weight":10},{"key":"GDG2THNO7333WXJU2ZMFAIDYEMJHWLHZLAJ6ZEV2QPWPWT7SSH4ETPIW","weight":20},{"key":"GDRWVPEIZK3YDKSLFPY4I4S2FOFZ6SJIRTUHTFN4NZGZTZGOIBRD4CT7","weight":10}],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":6,"num_sponsoring":0,"signer_sponsoring_i_ds":["GBKAZKU33LRJX47UGDX2YGA7UIJ5BWSVAFQJLBAUYIMOS5KBPVXKGO4X","GCUISJEWU2TZ4QIJNGNVU4BSZ5CQS3KE6A3N3ETOV7XHCBVO4GLTLGOQ","GBKAZKU33LRJX47UGDX2YGA7UIJ5BWSVAFQJLBAUYIMOS5KBPVXKGO4X"],"ext":{"v3":{"ext":"v0","seq_ledger":56858638,"seq_time":"1746041747"}}}}}}}},"ext":{"v1":{"sponsoring_id":"GBKAZKU33LRJX47UGDX2YGA7UIJ5BWSVAFQJLBAUYIMOS5KBPVXKGO4X","ext":"v0"}}}},{"updated":{"last_modified_ledger_seq":58166971,"data":{"account":{"account_id":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK","balance":"0","seq_num":"244204891193475075","num_sub_entries":4,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"00141414","signers":[{"key":"GCO6RBY3BSJ77Y77TUXV2O5AV5E5WHAKRVMFDBHHX4H4KSKPVMICFKT4","weight":10},{"key":"GDG2THNO7333WXJU2ZMFAIDYEMJHWLHZLAJ6ZEV2QPWPWT7SSH4ETPIW","weight":20},{"key":"GDRWVPEIZK3YDKSLFPY4I4S2FOFZ6SJIRTUHTFN4NZGZTZGOIBRD4CT7","weight":10}],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":6,"num_sponsoring":0,"signer_sponsoring_i_ds":["GBKAZKU33LRJX47UGDX2YGA7UIJ5BWSVAFQJLBAUYIMOS5KBPVXKGO4X","GCUISJEWU2TZ4QIJNGNVU4BSZ5CQS3KE6A3N3ETOV7XHCBVO4GLTLGOQ","GBKAZKU33LRJX47UGDX2YGA7UIJ5BWSVAFQJLBAUYIMOS5KBPVXKGO4X"],"ext":{"v3":{"ext":"v0","seq_ledger":58166971,"seq_time":"1753467627"}}}}}}}},"ext":{"v1":{"sponsoring_id":"GBKAZKU33LRJX47UGDX2YGA7UIJ5BWSVAFQJLBAUYIMOS5KBPVXKGO4X","ext":"v0"}}}}],"operations":[{"changes":[{"state":{"last_modified_ledger_seq":56858638,"data":{"contract_data":{"ext":"v0","contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"UserEmis"},{"map":[{"key":{"symbol":"reserve_id"},"val":{"u32":3}},{"key":{"symbol":"user"},"val":{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"}}]}]},"durability":"persistent","val":{"map":[{"key":{"symbol":"accrued"},"val":{"i128":"0"}},{"key":{"symbol":"index"},"val":{"i128":"16117732"}}]}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":58166971,"data":{"contract_data":{"ext":"v0","contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"UserEmis"},{"map":[{"key":{"symbol":"reserve_id"},"val":{"u32":3}},{"key":{"symbol":"user"},"val":{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"}}]}]},"durability":"persistent","val":{"map":[{"key":{"symbol":"accrued"},"val":{"i128":"3595324"}},{"key":{"symbol":"index"},"val":{"i128":"20142282"}}]}}},"ext":"v0"}},{"state":{"last_modified_ledger_seq":58166528,"data":{"contract_data":{"ext":"v0","contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"ResData"},{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"}]},"durability":"persistent","val":{"map":[{"key":{"symbol":"b_rate"},"val":{"i128":"1119495346"}},{"key":{"symbol":"b_supply"},"val":{"i128":"650408667001"}},{"key":{"symbol":"backstop_credit"},"val":{"i128":"1347654276"}},{"key":{"symbol":"d_rate"},"val":{"i128":"1190401998"}},{"key":{"symbol":"d_supply"},"val":{"i128":"58684906655"}},{"key":{"symbol":"ir_mod"},"val":{"i128":"100000000"}},{"key":{"symbol":"last_time"},"val":{"u64":"1753465101"}}]}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":58166971,"data":{"contract_data":{"ext":"v0","contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"ResData"},{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"}]},"durability":"persistent","val":{"map":[{"key":{"symbol":"b_rate"},"val":{"i128":"1119495371"}},{"key":{"symbol":"b_supply"},"val":{"i128":"650399733520"}},{"key":{"symbol":"backstop_credit"},"val":{"i128":"1347658442"}},{"key":{"symbol":"d_rate"},"val":{"i128":"1190402353"}},{"key":{"symbol":"d_supply"},"val":{"i128":"58684906655"}},{"key":{"symbol":"ir_mod"},"val":{"i128":"100000000"}},{"key":{"symbol":"last_time"},"val":{"u64":"1753467627"}}]}}},"ext":"v0"}},{"state":{"last_modified_ledger_seq":56858638,"data":{"ttl":{"key_hash":"ec31d93e482c805046d62dd73b28cca317660a98f88c191a59004c4c3f3f4445","live_until_ledger_seq":58932237}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":58166971,"data":{"ttl":{"key_hash":"ec31d93e482c805046d62dd73b28cca317660a98f88c191a59004c4c3f3f4445","live_until_ledger_seq":60240571}},"ext":"v0"}},{"state":{"last_modified_ledger_seq":56858638,"data":{"contract_data":{"ext":"v0","contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"Positions"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"}]},"durability":"persistent","val":{"map":[{"key":{"symbol":"collateral"},"val":{"map":[{"key":{"u32":1},"val":{"i128":"8933481"}}]}},{"key":{"symbol":"liabilities"},"val":{"map":[]}},{"key":{"symbol":"supply"},"val":{"map":[]}}]}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":58166971,"data":{"contract_data":{"ext":"v0","contract":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","key":{"vec":[{"symbol":"Positions"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"}]},"durability":"persistent","val":{"map":[{"key":{"symbol":"collateral"},"val":{"map":[]}},{"key":{"symbol":"liabilities"},"val":{"map":[]}},{"key":{"symbol":"supply"},"val":{"map":[]}}]}}},"ext":"v0"}},{"state":{"last_modified_ledger_seq":56858638,"data":{"ttl":{"key_hash":"23de831fb42c10fd3e52d2e5273666cc1ae375c7409df2c8c18c8dcbcebbc1d7","live_until_ledger_seq":58932237}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":58166971,"data":{"ttl":{"key_hash":"23de831fb42c10fd3e52d2e5273666cc1ae375c7409df2c8c18c8dcbcebbc1d7","live_until_ledger_seq":60240571}},"ext":"v0"}},{"state":{"last_modified_ledger_seq":58166528,"data":{"contract_data":{"ext":"v0","contract":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75","key":{"vec":[{"symbol":"Balance"},{"address":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP"}]},"durability":"persistent","val":{"map":[{"key":{"symbol":"amount"},"val":{"i128":"660267264555"}},{"key":{"symbol":"authorized"},"val":{"bool":true}},{"key":{"symbol":"clawback"},"val":{"bool":false}}]}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":58166971,"data":{"contract_data":{"ext":"v0","contract":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75","key":{"vec":[{"symbol":"Balance"},{"address":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP"}]},"durability":"persistent","val":{"map":[{"key":{"symbol":"amount"},"val":{"i128":"660257263565"}},{"key":{"symbol":"authorized"},"val":{"bool":true}},{"key":{"symbol":"clawback"},"val":{"bool":false}}]}}},"ext":"v0"}},{"state":{"last_modified_ledger_seq":56858638,"data":{"trustline":{"account_id":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK","asset":{"credit_alphanum4":{"asset_code":"USDC","issuer":"GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN"}},"balance":"0","limit":"9223372036854775807","flags":1,"ext":"v0"}},"ext":{"v1":{"sponsoring_id":"GBKAZKU33LRJX47UGDX2YGA7UIJ5BWSVAFQJLBAUYIMOS5KBPVXKGO4X","ext":"v0"}}}},{"updated":{"last_modified_ledger_seq":58166971,"data":{"trustline":{"account_id":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK","asset":{"credit_alphanum4":{"asset_code":"USDC","issuer":"GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN"}},"balance":"10000990","limit":"9223372036854775807","flags":1,"ext":"v0"}},"ext":{"v1":{"sponsoring_id":"GBKAZKU33LRJX47UGDX2YGA7UIJ5BWSVAFQJLBAUYIMOS5KBPVXKGO4X","ext":"v0"}}}}]}],"tx_changes_after":[{"state":{"last_modified_ledger_seq":58166971,"data":{"account":{"account_id":"GDJLH2F7DBI6GC22J7YUTPAEFRSWKG5MN5RSE2GOOYUTO4BH66LHENRW","balance":"22097264303","seq_num":"181263292226863151","num_sub_entries":4,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":2,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":56604244,"seq_time":"1744587782"}}}}}}}},"ext":"v0"}},{"updated":{"last_modified_ledger_seq":58166971,"data":{"account":{"account_id":"GDJLH2F7DBI6GC22J7YUTPAEFRSWKG5MN5RSE2GOOYUTO4BH66LHENRW","balance":"22098665911","seq_num":"181263292226863151","num_sub_entries":4,"inflation_dest":null,"flags":0,"home_domain":"","thresholds":"01000000","signers":[],"ext":{"v1":{"liabilities":{"buying":"0","selling":"0"},"ext":{"v2":{"num_sponsored":0,"num_sponsoring":2,"signer_sponsoring_i_ds":[],"ext":{"v3":{"ext":"v0","seq_ledger":56604244,"seq_time":"1744587782"}}}}}}}},"ext":"v0"}}],"soroban_meta":{"ext":{"v1":{"ext":"v0","total_non_refundable_resource_fee_charged":"285226","total_refundable_resource_fee_charged":"3317604","rent_fee_charged":"3312096"}},"events":[{"ext":"v0","contract_id":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","type_":"contract","body":{"v0":{"topics":[{"symbol":"withdraw_collateral"},{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"}],"data":{"vec":[{"i128":"10000990"},{"i128":"8933481"}]}}}},{"ext":"v0","contract_id":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75","type_":"contract","body":{"v0":{"topics":[{"symbol":"transfer"},{"address":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"string":"USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN"}],"data":{"i128":"10000990"}}}}],"return_value":{"map":[{"key":{"symbol":"collateral"},"val":{"map":[]}},{"key":{"symbol":"liabilities"},"val":{"map":[]}},{"key":{"symbol":"supply"},"val":{"map":[]}}]},"diagnostic_events":[{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_call"},{"bytes":"eb0aa9d8d625796902fa9be6341291de077e8dd523a7378e46a4a6152da8183b"},{"symbol":"submit"}],"data":{"vec":[{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"vec":[{"map":[{"key":{"symbol":"address"},"val":{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"}},{"key":{"symbol":"amount"},"val":{"i128":"10000990"}},{"key":{"symbol":"request_type"},"val":{"u32":3}}]}]}]}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","type_":"contract","body":{"v0":{"topics":[{"symbol":"withdraw_collateral"},{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"}],"data":{"vec":[{"i128":"10000990"},{"i128":"8933481"}]}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_call"},{"bytes":"adefce59aee52968f76061d494c2525b75659fa4296a65f499ef29e56477e496"},{"symbol":"transfer"}],"data":{"vec":[{"address":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"i128":"10000990"}]}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75","type_":"contract","body":{"v0":{"topics":[{"symbol":"transfer"},{"address":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"string":"USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN"}],"data":{"i128":"10000990"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75","type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_return"},{"symbol":"transfer"}],"data":"void"}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_return"},{"symbol":"submit"}],"data":{"map":[{"key":{"symbol":"collateral"},"val":{"map":[]}},{"key":{"symbol":"liabilities"},"val":{"map":[]}},{"key":{"symbol":"supply"},"val":{"map":[]}}]}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_entry"}],"data":{"u64":"11"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_entry"}],"data":{"u64":"5"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"ledger_read_byte"}],"data":{"u64":"53060"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"ledger_write_byte"}],"data":{"u64":"1276"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_key_byte"}],"data":{"u64":"1008"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_key_byte"}],"data":{"u64":"0"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_data_byte"}],"data":{"u64":"3028"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_data_byte"}],"data":{"u64":"1276"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_code_byte"}],"data":{"u64":"50032"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_code_byte"}],"data":{"u64":"0"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"emit_event"}],"data":{"u64":"2"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"emit_event_byte"}],"data":{"u64":"460"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"cpu_insn"}],"data":{"u64":"8808582"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"mem_byte"}],"data":{"u64":"3010311"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"invoke_time_nsecs"}],"data":{"u64":"1166673"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_key_byte"}],"data":{"u64":"168"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_data_byte"}],"data":{"u64":"508"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_code_byte"}],"data":{"u64":"50032"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_emit_event_byte"}],"data":{"u64":"244"}}}}}]}}},"events":{"contract_events":[],"diagnostic_events":[{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_call"},{"bytes":"eb0aa9d8d625796902fa9be6341291de077e8dd523a7378e46a4a6152da8183b"},{"symbol":"submit"}],"data":{"vec":[{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"vec":[{"map":[{"key":{"symbol":"address"},"val":{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"}},{"key":{"symbol":"amount"},"val":{"i128":"10000990"}},{"key":{"symbol":"request_type"},"val":{"u32":3}}]}]}]}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","type_":"contract","body":{"v0":{"topics":[{"symbol":"withdraw_collateral"},{"address":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"}],"data":{"vec":[{"i128":"10000990"},{"i128":"8933481"}]}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_call"},{"bytes":"adefce59aee52968f76061d494c2525b75659fa4296a65f499ef29e56477e496"},{"symbol":"transfer"}],"data":{"vec":[{"address":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"i128":"10000990"}]}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75","type_":"contract","body":{"v0":{"topics":[{"symbol":"transfer"},{"address":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP"},{"address":"GBQUFZ3QRIP6VQ74BV6KJGBEJ7YFE4WGRCB4YCMGTXFEMYLXNI2CC2AK"},{"string":"USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN"}],"data":{"i128":"10000990"}}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75","type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_return"},{"symbol":"transfer"}],"data":"void"}}}},{"in_successful_contract_call":true,"event":{"ext":"v0","contract_id":"CDVQVKOY2YSXS2IC7KN6MNASSHPAO7UN2UR2ON4OI2SKMFJNVAMDX6DP","type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"fn_return"},{"symbol":"submit"}],"data":{"map":[{"key":{"symbol":"collateral"},"val":{"map":[]}},{"key":{"symbol":"liabilities"},"val":{"map":[]}},{"key":{"symbol":"supply"},"val":{"map":[]}}]}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_entry"}],"data":{"u64":"11"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_entry"}],"data":{"u64":"5"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"ledger_read_byte"}],"data":{"u64":"53060"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"ledger_write_byte"}],"data":{"u64":"1276"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_key_byte"}],"data":{"u64":"1008"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_key_byte"}],"data":{"u64":"0"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_data_byte"}],"data":{"u64":"3028"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_data_byte"}],"data":{"u64":"1276"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"read_code_byte"}],"data":{"u64":"50032"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"write_code_byte"}],"data":{"u64":"0"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"emit_event"}],"data":{"u64":"2"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"emit_event_byte"}],"data":{"u64":"460"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"cpu_insn"}],"data":{"u64":"8808582"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"mem_byte"}],"data":{"u64":"3010311"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"invoke_time_nsecs"}],"data":{"u64":"1166673"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_key_byte"}],"data":{"u64":"168"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_data_byte"}],"data":{"u64":"508"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_rw_code_byte"}],"data":{"u64":"50032"}}}}},{"in_successful_contract_call":false,"event":{"ext":"v0","contract_id":null,"type_":"diagnostic","body":{"v0":{"topics":[{"symbol":"core_metrics"},{"symbol":"max_emit_event_byte"}],"data":{"u64":"244"}}}}}],"transaction_events":[]}}"#;
}