diff --git a/Cargo.lock b/Cargo.lock index b518644..6ae09d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1079,7 +1079,7 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "stellar-rpc-client" -version = "21.4.0" +version = "22.0.0-rc.1" dependencies = [ "clap", "hex", diff --git a/Cargo.toml b/Cargo.toml index d6d6f32..174aa35 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ repository = "https://github.com/stellar/soroban-rpc" authors = ["Stellar Development Foundation "] license = "Apache-2.0" readme = "README.md" -version = "21.4.0" +version = "22.0.0-rc.1" edition = "2021" rust-version = "1.74.0" autobins = false @@ -20,7 +20,6 @@ crate-type = ["rlib"] stellar-strkey = "0.0.9" stellar-xdr = { version = "=22.0.0-rc.1.1", features = ["curr", "std", "serde", "base64"] } - termcolor = "1.1.3" termcolor_output = "1.0.1" clap = { version = "4.1.8", features = ["derive"] } diff --git a/src/fixtures/curr_simulation_response.json b/src/fixtures/curr_simulation_response.json new file mode 100644 index 0000000..2d23554 --- /dev/null +++ b/src/fixtures/curr_simulation_response.json @@ -0,0 +1,23 @@ +{ + "jsonrpc": "2.0", + "id": 8675309, + "result": { + "transactionData": "AAAAAAAAAAIAAAAGAAAAASxiqIvl5E+k9crKi8h1V87Ud/UtOOfWNftOQUbizvLRAAAAFAAAAAEAAAAHtG6wcUh/yelE4Mo5xb8iCSWybOS5ZuiiNrZ/Ps7wmesAAAAAAGYCGQAAHmwAAAAAAAAAAAABaUc=", + "minResourceFee": "92487", + "events": [ + "AAAAAQAAAAAAAAAAAAAAAgAAAAAAAAADAAAADwAAAAdmbl9jYWxsAAAAAA0AAAAgLGKoi+XkT6T1ysqLyHVXztR39S0459Y1+05BRuLO8tEAAAAPAAAACWdldF9hZG1pbgAAAAAAAAE=", + "AAAAAQAAAAAAAAABLGKoi+XkT6T1ysqLyHVXztR39S0459Y1+05BRuLO8tEAAAACAAAAAAAAAAIAAAAPAAAACWZuX3JldHVybgAAAAAAAA8AAAAJZ2V0X2FkbWluAAAAAAAAEgAAAAAAAAAAZhscwQWxblWcuoqgH9hR7LnJ7IEonYTcPa9GWIRKJrY=" + ], + "results": [ + { + "auth": [], + "xdr": "AAAAEgAAAAAAAAAAZhscwQWxblWcuoqgH9hR7LnJ7IEonYTcPa9GWIRKJrY=" + } + ], + "cost": { + "cpuInsns": "3685209", + "memBytes": "1751351" + }, + "latestLedger": 53795023 + } + } \ No newline at end of file diff --git a/src/fixtures/curr_transaction_response.json b/src/fixtures/curr_transaction_response.json new file mode 100644 index 0000000..4354719 --- /dev/null +++ b/src/fixtures/curr_transaction_response.json @@ -0,0 +1,40 @@ +{ + "jsonrpc": "2.0", + "id": 8675309, + "result": { + "status": "SUCCESS", + "latestLedger": 53794558, + "latestLedgerCloseTime": "1728063258", + "oldestLedger": 53777279, + "oldestLedgerCloseTime": "1727963878", + "applicationOrder": 251, + "envelopeXdr": "AAAAAgAAAABmGxzBBbFuVZy6iqAf2FHsucnsgSidhNw9r0ZYhEomtgAD0HkDDjo/AABLOQAAAAEAAAAAAAAAAAAAAABnACeAAAAAAAAAAAEAAAAAAAAAGAAAAAAAAAABLGKoi+XkT6T1ysqLyHVXztR39S0459Y1+05BRuLO8tEAAAAJc2V0X3ByaWNlAAAAAAAAAwAAAAMAAAABAAAAAQAAAAkAAAAAAAAAAAAAAAJUC+QAAAAAAQAAAAAAAAAAAAAAASxiqIvl5E+k9crKi8h1V87Ud/UtOOfWNftOQUbizvLRAAAACXNldF9wcmljZQAAAAAAAAMAAAADAAAAAQAAAAEAAAAJAAAAAAAAAAAAAAACVAvkAAAAAAAAAAABAAAAAAAAAAIAAAAGAAAAASxiqIvl5E+k9crKi8h1V87Ud/UtOOfWNftOQUbizvLRAAAAFAAAAAEAAAAHtG6wcUh/yelE4Mo5xb8iCSWybOS5ZuiiNrZ/Ps7wmesAAAABAAAABgAAAAEsYqiL5eRPpPXKyovIdVfO1Hf1LTjn1jX7TkFG4s7y0QAAAAMAAAABAAAAAAA7uNwAAB8EAAAAmAAAAAAAAegOAAAAAYRKJrYAAABARZy4UI+vmHnfij4bZzud6KkNbmRu957Kznc/PmUAwffNq119qbjVPFPZ4TnUP0NlQ/Dev2P5v22UcUor4QF3BQ==", + "resultXdr": "AAAAAAABM+8AAAAAAAAAAQAAAAAAAAAYAAAAAMu8SHUN67hTUJOz3q+IrH9M/4dCVXaljeK6x1Ss20YWAAAAAA==", + "resultMetaXdr": "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", + "ledger": 53794524, + "createdAt": "1728063066", + "diagnosticEventsXdr": [ + "AAAAAQAAAAAAAAAAAAAAAgAAAAAAAAADAAAADwAAAAdmbl9jYWxsAAAAAA0AAAAgLGKoi+XkT6T1ysqLyHVXztR39S0459Y1+05BRuLO8tEAAAAPAAAACXNldF9wcmljZQAAAAAAABAAAAABAAAAAwAAAAMAAAABAAAAAQAAAAkAAAAAAAAAAAAAAAJUC+QA", + "AAAAAQAAAAAAAAABLGKoi+XkT6T1ysqLyHVXztR39S0459Y1+05BRuLO8tEAAAACAAAAAAAAAAIAAAAPAAAACWZuX3JldHVybgAAAAAAAA8AAAAJc2V0X3ByaWNlAAAAAAAAAQ==", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAACnJlYWRfZW50cnkAAAAAAAUAAAAAAAAAAw==", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAC3dyaXRlX2VudHJ5AAAAAAUAAAAAAAAAAQ==", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAEGxlZGdlcl9yZWFkX2J5dGUAAAAFAAAAAAAAHwQ=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAEWxlZGdlcl93cml0ZV9ieXRlAAAAAAAABQAAAAAAAACY", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAADXJlYWRfa2V5X2J5dGUAAAAAAAAFAAAAAAAAAIg=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAADndyaXRlX2tleV9ieXRlAAAAAAAFAAAAAAAAAAA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAADnJlYWRfZGF0YV9ieXRlAAAAAAAFAAAAAAAAAUw=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAD3dyaXRlX2RhdGFfYnl0ZQAAAAAFAAAAAAAAAJg=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAADnJlYWRfY29kZV9ieXRlAAAAAAAFAAAAAAAAHbg=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAD3dyaXRlX2NvZGVfYnl0ZQAAAAAFAAAAAAAAAAA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAACmVtaXRfZXZlbnQAAAAAAAUAAAAAAAAAAA==", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAD2VtaXRfZXZlbnRfYnl0ZQAAAAAFAAAAAAAAAAA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAACGNwdV9pbnNuAAAABQAAAAAAOS15", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAACG1lbV9ieXRlAAAABQAAAAAAGufZ", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAEWludm9rZV90aW1lX25zZWNzAAAAAAAABQAAAAAABhYJ", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAD21heF9yd19rZXlfYnl0ZQAAAAAFAAAAAAAAADQ=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAEG1heF9yd19kYXRhX2J5dGUAAAAFAAAAAAAAALQ=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAEG1heF9yd19jb2RlX2J5dGUAAAAFAAAAAAAAHbg=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAE21heF9lbWl0X2V2ZW50X2J5dGUAAAAABQAAAAAAAAAA" + ] + } + } \ No newline at end of file diff --git a/src/fixtures/transactions_response.json b/src/fixtures/curr_transactions_response.json similarity index 100% rename from src/fixtures/transactions_response.json rename to src/fixtures/curr_transactions_response.json diff --git a/src/fixtures/new_event_response.json b/src/fixtures/new_event_response.json new file mode 100644 index 0000000..a86f9ea --- /dev/null +++ b/src/fixtures/new_event_response.json @@ -0,0 +1,1413 @@ +{ + "jsonrpc": "2.0", + "id": 8675309, + "result": { + "events": [ + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000000", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAApyZWFkX2VudHJ5AAA=" + ], + "value": "AAAABQAAAAAAAAAB" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000001", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAt3cml0ZV9lbnRyeQA=" + ], + "value": "AAAABQAAAAAAAAAB" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000002", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBsZWRnZXJfcmVhZF9ieXRl" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000003", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABFsZWRnZXJfd3JpdGVfYnl0ZQAAAA==" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000004", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA1yZWFkX2tleV9ieXRlAAAA" + ], + "value": "AAAABQAAAAAAAAAk" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000005", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA53cml0ZV9rZXlfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000006", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA5yZWFkX2RhdGFfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000007", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA93cml0ZV9kYXRhX2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000008", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA5yZWFkX2NvZGVfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000009", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA93cml0ZV9jb2RlX2J5dGUA" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000010", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAplbWl0X2V2ZW50AAA=" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000011", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA9lbWl0X2V2ZW50X2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000012", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAhjcHVfaW5zbg==" + ], + "value": "AAAABQAAAAAAG11G" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000013", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAhtZW1fYnl0ZQ==" + ], + "value": "AAAABQAAAAAAFg72" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000014", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABFpbnZva2VfdGltZV9uc2VjcwAAAA==" + ], + "value": "AAAABQAAAAAAArNj" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000015", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA9tYXhfcndfa2V5X2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAk" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000016", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBtYXhfcndfZGF0YV9ieXRl" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000017", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBtYXhfcndfY29kZV9ieXRl" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 79, + "ledgerClosedAt": "2024-10-11T17:28:39Z", + "contractId": "", + "id": "0000000339302420480-0000000018", + "inSuccessfulContractCall": false, + "txHash": "16b806c63979cf9a39797439ad5b30eeb394f305cc23c53b230c65f9d71bdb36", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABNtYXhfZW1pdF9ldmVudF9ieXRlAA==" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000000", + "inSuccessfulContractCall": true, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAdmbl9jYWxsAA==", + "AAAADQAAACA2Jvf90fYKHf4Or0s4mKfS+y6077UxFfylf2g7Q09lPg==", + "AAAADwAAAA1fX2NvbnN0cnVjdG9yAAAA" + ], + "value": "AAAAAwAAACo=" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "CA3CN5752H3AUHP6B2XUWOEYU7JPWLVU562TCFP4UV7WQO2DJ5ST42SE", + "id": "0000001644972478464-0000000001", + "inSuccessfulContractCall": true, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAlmbl9yZXR1cm4AAAA=", + "AAAADwAAAA1fX2NvbnN0cnVjdG9yAAAA" + ], + "value": "AAAAAQ==" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000002", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAApyZWFkX2VudHJ5AAA=" + ], + "value": "AAAABQAAAAAAAAAD" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000003", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAt3cml0ZV9lbnRyeQA=" + ], + "value": "AAAABQAAAAAAAAAC" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000004", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBsZWRnZXJfcmVhZF9ieXRl" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000005", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABFsZWRnZXJfd3JpdGVfYnl0ZQAAAA==" + ], + "value": "AAAABQAAAAAAAAC4" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000006", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA1yZWFkX2tleV9ieXRlAAAA" + ], + "value": "AAAABQAAAAAAAACQ" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000007", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA53cml0ZV9rZXlfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000008", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA5yZWFkX2RhdGFfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000009", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA93cml0ZV9kYXRhX2J5dGUA" + ], + "value": "AAAABQAAAAAAAAC4" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000010", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA5yZWFkX2NvZGVfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000011", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA93cml0ZV9jb2RlX2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000012", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAplbWl0X2V2ZW50AAA=" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000013", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA9lbWl0X2V2ZW50X2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000014", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAhjcHVfaW5zbg==" + ], + "value": "AAAABQAAAAAAEM3q" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000015", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAhtZW1fYnl0ZQ==" + ], + "value": "AAAABQAAAAAAIzSM" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000016", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABFpbnZva2VfdGltZV9uc2VjcwAAAA==" + ], + "value": "AAAABQAAAAAADp9h" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000017", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA9tYXhfcndfa2V5X2J5dGUA" + ], + "value": "AAAABQAAAAAAAAA8" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000018", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBtYXhfcndfZGF0YV9ieXRl" + ], + "value": "AAAABQAAAAAAAABo" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000019", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBtYXhfcndfY29kZV9ieXRl" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 383, + "ledgerClosedAt": "2024-10-11T17:33:43Z", + "contractId": "", + "id": "0000001644972478464-0000000020", + "inSuccessfulContractCall": false, + "txHash": "68e4b007bb66c364ed888b8a853412e5fa82ceb850f44230ce4391ce4b11407a", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABNtYXhfZW1pdF9ldmVudF9ieXRlAA==" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000000", + "inSuccessfulContractCall": true, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAdmbl9jYWxsAA==", + "AAAADQAAACBS528XhJs6awtcklzIvLLFg/BviL7m6mkXQBqv/PQI/Q==", + "AAAADwAAAA1fX2NvbnN0cnVjdG9yAAAA" + ], + "value": "AAAAAwAAACo=" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "CBJOO3YXQSNTU2YLLSJFZSF4WLCYH4DPRC7ON2TJC5ABVL746QEP3YDL", + "id": "0000002022929600512-0000000001", + "inSuccessfulContractCall": true, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAlmbl9yZXR1cm4AAAA=", + "AAAADwAAAA1fX2NvbnN0cnVjdG9yAAAA" + ], + "value": "AAAAAQ==" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000002", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAApyZWFkX2VudHJ5AAA=" + ], + "value": "AAAABQAAAAAAAAAD" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000003", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAt3cml0ZV9lbnRyeQA=" + ], + "value": "AAAABQAAAAAAAAAC" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000004", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBsZWRnZXJfcmVhZF9ieXRl" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000005", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABFsZWRnZXJfd3JpdGVfYnl0ZQAAAA==" + ], + "value": "AAAABQAAAAAAAAC4" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000006", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA1yZWFkX2tleV9ieXRlAAAA" + ], + "value": "AAAABQAAAAAAAACQ" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000007", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA53cml0ZV9rZXlfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000008", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA5yZWFkX2RhdGFfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000009", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA93cml0ZV9kYXRhX2J5dGUA" + ], + "value": "AAAABQAAAAAAAAC4" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000010", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA5yZWFkX2NvZGVfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000011", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA93cml0ZV9jb2RlX2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000012", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAplbWl0X2V2ZW50AAA=" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000013", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA9lbWl0X2V2ZW50X2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000014", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAhjcHVfaW5zbg==" + ], + "value": "AAAABQAAAAAAEM3q" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000015", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAhtZW1fYnl0ZQ==" + ], + "value": "AAAABQAAAAAAIzSM" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000016", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABFpbnZva2VfdGltZV9uc2VjcwAAAA==" + ], + "value": "AAAABQAAAAAABbPp" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000017", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA9tYXhfcndfa2V5X2J5dGUA" + ], + "value": "AAAABQAAAAAAAAA8" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000018", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBtYXhfcndfZGF0YV9ieXRl" + ], + "value": "AAAABQAAAAAAAABo" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000019", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBtYXhfcndfY29kZV9ieXRl" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 471, + "ledgerClosedAt": "2024-10-11T17:35:11Z", + "contractId": "", + "id": "0000002022929600512-0000000020", + "inSuccessfulContractCall": false, + "txHash": "8683611558a8fb0f6d52775fa7a864a87a4cbadedb3cc318503d7329e9b7ecd5", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABNtYXhfZW1pdF9ldmVudF9ieXRlAA==" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000000", + "inSuccessfulContractCall": true, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAdmbl9jYWxsAA==", + "AAAADQAAACDn6QFILXc6DYHnGaBGPgYZerag9Ow1/tOIGA9gN5v3Uw==", + "AAAADwAAAA1fX2NvbnN0cnVjdG9yAAAA" + ], + "value": "AAAAAwAAACo=" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "CDT6SAKIFV3TUDMB44M2ARR6AYMXVNVA6TWDL7WTRAMA6YBXTP3VHQZM", + "id": "0000010226317135872-0000000001", + "inSuccessfulContractCall": true, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAlmbl9yZXR1cm4AAAA=", + "AAAADwAAAA1fX2NvbnN0cnVjdG9yAAAA" + ], + "value": "AAAAAQ==" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000002", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAApyZWFkX2VudHJ5AAA=" + ], + "value": "AAAABQAAAAAAAAAD" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000003", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAt3cml0ZV9lbnRyeQA=" + ], + "value": "AAAABQAAAAAAAAAC" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000004", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBsZWRnZXJfcmVhZF9ieXRl" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000005", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABFsZWRnZXJfd3JpdGVfYnl0ZQAAAA==" + ], + "value": "AAAABQAAAAAAAAC4" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000006", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA1yZWFkX2tleV9ieXRlAAAA" + ], + "value": "AAAABQAAAAAAAACQ" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000007", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA53cml0ZV9rZXlfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000008", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA5yZWFkX2RhdGFfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000009", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA93cml0ZV9kYXRhX2J5dGUA" + ], + "value": "AAAABQAAAAAAAAC4" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000010", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA5yZWFkX2NvZGVfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000011", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA93cml0ZV9jb2RlX2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000012", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAplbWl0X2V2ZW50AAA=" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000013", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA9lbWl0X2V2ZW50X2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000014", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAhjcHVfaW5zbg==" + ], + "value": "AAAABQAAAAAAEM3q" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000015", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAhtZW1fYnl0ZQ==" + ], + "value": "AAAABQAAAAAAIzSM" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000016", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABFpbnZva2VfdGltZV9uc2VjcwAAAA==" + ], + "value": "AAAABQAAAAAAC4gn" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000017", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA9tYXhfcndfa2V5X2J5dGUA" + ], + "value": "AAAABQAAAAAAAAA8" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000018", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBtYXhfcndfZGF0YV9ieXRl" + ], + "value": "AAAABQAAAAAAAABo" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000019", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBtYXhfcndfY29kZV9ieXRl" + ], + "value": "AAAABQAAAAAAAALQ" + }, + { + "type": "diagnostic", + "ledger": 2381, + "ledgerClosedAt": "2024-10-11T18:07:02Z", + "contractId": "", + "id": "0000010226317135872-0000000020", + "inSuccessfulContractCall": false, + "txHash": "3c27219d0f512627d75beae8f20095c066a2b08a51bf540a9ed21845836a6adf", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABNtYXhfZW1pdF9ldmVudF9ieXRlAA==" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000000", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAApyZWFkX2VudHJ5AAA=" + ], + "value": "AAAABQAAAAAAAAAB" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000001", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAt3cml0ZV9lbnRyeQA=" + ], + "value": "AAAABQAAAAAAAAAB" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000002", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBsZWRnZXJfcmVhZF9ieXRl" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000003", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABFsZWRnZXJfd3JpdGVfYnl0ZQAAAA==" + ], + "value": "AAAABQAAAAAAABOA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000004", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA1yZWFkX2tleV9ieXRlAAAA" + ], + "value": "AAAABQAAAAAAAAAk" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000005", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA53cml0ZV9rZXlfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000006", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA5yZWFkX2RhdGFfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000007", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA93cml0ZV9kYXRhX2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000008", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA5yZWFkX2NvZGVfYnl0ZQAA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000009", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA93cml0ZV9jb2RlX2J5dGUA" + ], + "value": "AAAABQAAAAAAABOA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000010", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAplbWl0X2V2ZW50AAA=" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000011", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA9lbWl0X2V2ZW50X2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000012", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAhjcHVfaW5zbg==" + ], + "value": "AAAABQAAAAAAT6y6" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000013", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAAhtZW1fYnl0ZQ==" + ], + "value": "AAAABQAAAAAAHT7O" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000014", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABFpbnZva2VfdGltZV9uc2VjcwAAAA==" + ], + "value": "AAAABQAAAAAABkCm" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000015", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAAA9tYXhfcndfa2V5X2J5dGUA" + ], + "value": "AAAABQAAAAAAAAAk" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000016", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBtYXhfcndfZGF0YV9ieXRl" + ], + "value": "AAAABQAAAAAAAAAA" + }, + { + "type": "diagnostic", + "ledger": 2994, + "ledgerClosedAt": "2024-10-11T18:17:16Z", + "contractId": "", + "id": "0000012859132096512-0000000017", + "inSuccessfulContractCall": false, + "txHash": "21812649f3ea987f87e737b82663a581d72a11cc5293569b25330e335ec528ef", + "topic": [ + "AAAADwAAAAxjb3JlX21ldHJpY3M=", + "AAAADwAAABBtYXhfcndfY29kZV9ieXRl" + ], + "value": "AAAABQAAAAAAABOA" + } + ], + "latestLedger": 3266, + "cursor": "0000012859132096512-0000000017" + } + } \ No newline at end of file diff --git a/src/fixtures/new_transaction_response.json b/src/fixtures/new_transaction_response.json new file mode 100644 index 0000000..0d23df1 --- /dev/null +++ b/src/fixtures/new_transaction_response.json @@ -0,0 +1,42 @@ +{ + "jsonrpc": "2.0", + "id": 8675309, + "result": { + "latestLedger": 525, + "latestLedgerCloseTime": "1728668165", + "oldestLedger": 8, + "oldestLedgerCloseTime": "1728667648", + "status": "SUCCESS", + "txHash": "", + "applicationOrder": 1, + "feeBump": false, + "envelopeXdr": "AAAAAgAAAADMFskDLQFjup1uLPnCjEbp8fpImin4ycCETWRBHJQ70QAGsaMAAAAyAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAYAAAAAwAAAAAAAAAAAAAAAMwWyQMtAWO6nW4s+cKMRunx+kiaKfjJwIRNZEEclDvRwFEDwGZvE+m1W70yJtz6mg6L9ecXovz50iIwj3U/dAwAAAAAZcYNglbQxXqFsckxwbqVygeQK1a1BblV7GdtI3GOH8gAAAABAAAAAwAAACoAAAABAAAAAAAAAAIAAAAAAAAAAAAAAADMFskDLQFjup1uLPnCjEbp8fpImin4ycCETWRBHJQ70cBRA8BmbxPptVu9Mibc+poOi/XnF6L8+dIiMI91P3QMAAAAAGXGDYJW0MV6hbHJMcG6lcoHkCtWtQW5VexnbSNxjh/IAAAAAQAAAAMAAAAqAAAAAAAAAAEAAAAAAAAAAQAAAAdlxg2CVtDFeoWxyTHBupXKB5ArVrUFuVXsZ20jcY4fyAAAAAIAAAAGAAAAAVLnbxeEmzprC1ySXMi8ssWD8G+IvubqaRdAGq/89Aj9AAAADwAAAAdDT1VOVEVSAAAAAAEAAAAGAAAAAVLnbxeEmzprC1ySXMi8ssWD8G+IvubqaRdAGq/89Aj9AAAAFAAAAAEAEdChAAAC0AAAALgAAAAAAAaxPwAAAAEclDvRAAAAQPaL0ISJyV1xnGk2ePA+/hFzc36a5wc6IpaHVeBDkfvVFMLaL89qaa6sgEjsoaLt8gy94KwcIDmLa/xDrt3vjQs=", + "resultXdr": "AAAAAAAFQh4AAAAAAAAAAQAAAAAAAAAYAAAAAHq9lpeC7z1JAslDMeLZ8JXmX88jDrinqWqyibnh+zHgAAAAAA==", + "resultMetaXdr": "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", + "diagnosticEventsXdr": [ + "AAAAAQAAAAAAAAAAAAAAAgAAAAAAAAADAAAADwAAAAdmbl9jYWxsAAAAAA0AAAAgUudvF4SbOmsLXJJcyLyyxYPwb4i+5uppF0Aar/z0CP0AAAAPAAAADV9fY29uc3RydWN0b3IAAAAAAAADAAAAKg==", + "AAAAAQAAAAAAAAABUudvF4SbOmsLXJJcyLyyxYPwb4i+5uppF0Aar/z0CP0AAAACAAAAAAAAAAIAAAAPAAAACWZuX3JldHVybgAAAAAAAA8AAAANX19jb25zdHJ1Y3RvcgAAAAAAAAE=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAACnJlYWRfZW50cnkAAAAAAAUAAAAAAAAAAw==", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAC3dyaXRlX2VudHJ5AAAAAAUAAAAAAAAAAg==", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAEGxlZGdlcl9yZWFkX2J5dGUAAAAFAAAAAAAAAtA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAEWxlZGdlcl93cml0ZV9ieXRlAAAAAAAABQAAAAAAAAC4", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAADXJlYWRfa2V5X2J5dGUAAAAAAAAFAAAAAAAAAJA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAADndyaXRlX2tleV9ieXRlAAAAAAAFAAAAAAAAAAA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAADnJlYWRfZGF0YV9ieXRlAAAAAAAFAAAAAAAAAAA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAD3dyaXRlX2RhdGFfYnl0ZQAAAAAFAAAAAAAAALg=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAADnJlYWRfY29kZV9ieXRlAAAAAAAFAAAAAAAAAtA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAD3dyaXRlX2NvZGVfYnl0ZQAAAAAFAAAAAAAAAAA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAACmVtaXRfZXZlbnQAAAAAAAUAAAAAAAAAAA==", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAD2VtaXRfZXZlbnRfYnl0ZQAAAAAFAAAAAAAAAAA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAACGNwdV9pbnNuAAAABQAAAAAAEM3q", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAACG1lbV9ieXRlAAAABQAAAAAAIzSM", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAEWludm9rZV90aW1lX25zZWNzAAAAAAAABQAAAAAABbPp", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAD21heF9yd19rZXlfYnl0ZQAAAAAFAAAAAAAAADw=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAEG1heF9yd19kYXRhX2J5dGUAAAAFAAAAAAAAAGg=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAEG1heF9yd19jb2RlX2J5dGUAAAAFAAAAAAAAAtA=", + "AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAADwAAAAxjb3JlX21ldHJpY3MAAAAPAAAAE21heF9lbWl0X2V2ZW50X2J5dGUAAAAABQAAAAAAAAAA" + ], + "ledger": 471, + "createdAt": "1728668111" + } +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 821a68d..4c33ed5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,12 +10,13 @@ use serde_aux::prelude::{ use serde_with::{serde_as, DisplayFromStr}; use stellar_xdr::curr::{ self as xdr, AccountEntry, AccountId, ContractDataEntry, ContractEventType, DiagnosticEvent, - Error as XdrError, Hash, LedgerEntryData, LedgerFootprint, LedgerKey, LedgerKeyAccount, - Limited, Limits, PublicKey, ReadXdr, ScContractInstance, SorobanAuthorizationEntry, - SorobanResources, SorobanTransactionData, TransactionEnvelope, TransactionMeta, - TransactionMetaV3, TransactionResult, Uint256, VecM, WriteXdr, + Error as XdrError, Hash, LedgerEntryData, LedgerFootprint, LedgerKey, LedgerKeyAccount, Limits, + ReadXdr, ScContractInstance, ScVal, SorobanAuthorizationEntry, SorobanResources, + SorobanTransactionData, TransactionEnvelope, TransactionMeta, TransactionMetaV3, + TransactionResult, VecM, WriteXdr, }; +use std::ops::Deref; use std::{ f64::consts::E, fmt::Display, @@ -29,6 +30,7 @@ use termcolor_output::colored; use tokio::time::sleep; const VERSION: Option<&str> = option_env!("CARGO_PKG_VERSION"); +const MAX_DEPTH: u32 = 1000; pub type LogEvents = fn( footprint: &LedgerFootprint, @@ -100,6 +102,10 @@ pub enum Error { MissingOp, } +fn from_xdr(x: &str) -> Result { + T::from_xdr_base64(x, Limits::depth(MAX_DEPTH)) +} + #[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] pub struct SendTransactionResponse { pub hash: String, @@ -121,30 +127,31 @@ pub struct SendTransactionResponse { #[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] pub struct GetTransactionResponseRaw { - pub status: String, + #[serde(rename = "latestLedger")] + pub latest_ledger: u32, #[serde( - rename = "envelopeXdr", - skip_serializing_if = "Option::is_none", - default + rename = "latestLedgerCloseTime", + deserialize_with = "deserialize_number_from_string" )] - pub envelope_xdr: Option, - #[serde(rename = "resultXdr", skip_serializing_if = "Option::is_none", default)] - pub result_xdr: Option, + pub latest_ledger_close_time: i64, + #[serde(rename = "oldestLedger")] + pub oldest_ledger: u32, #[serde( - rename = "resultMetaXdr", - skip_serializing_if = "Option::is_none", - default + rename = "oldestLedgerCloseTime", + deserialize_with = "deserialize_number_from_string" )] - pub result_meta_xdr: Option, - // TODO: add ledger info and application order + pub oldest_ledger_close_time: u32, + #[serde(flatten)] + pub transaction_info: TransactionInfoRaw, } #[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] pub struct GetTransactionResponse { - pub status: String, - pub envelope: Option, - pub result: Option, - pub result_meta: Option, + pub latest_ledger: u32, + pub latest_ledger_close_time: i64, + pub oldest_ledger: u32, + pub oldest_ledger_close_time: u32, + pub transaction_info: TransactionInfo, } impl TryInto for GetTransactionResponseRaw { @@ -152,19 +159,11 @@ impl TryInto for GetTransactionResponseRaw { fn try_into(self) -> Result { Ok(GetTransactionResponse { - status: self.status, - envelope: self - .envelope_xdr - .map(|v| ReadXdr::from_xdr_base64(v, Limits::none())) - .transpose()?, - result: self - .result_xdr - .map(|v| ReadXdr::from_xdr_base64(v, Limits::none())) - .transpose()?, - result_meta: self - .result_meta_xdr - .map(|v| ReadXdr::from_xdr_base64(v, Limits::none())) - .transpose()?, + latest_ledger: self.latest_ledger, + latest_ledger_close_time: self.latest_ledger_close_time, + oldest_ledger: self.oldest_ledger, + oldest_ledger_close_time: self.oldest_ledger_close_time, + transaction_info: self.transaction_info.try_into()?, }) } } @@ -176,7 +175,7 @@ impl GetTransactionResponse { if let Some(xdr::TransactionMeta::V3(xdr::TransactionMetaV3 { soroban_meta: Some(xdr::SorobanTransactionMeta { return_value, .. }), .. - })) = &self.result_meta + })) = &self.transaction_info.result_meta { Ok(return_value.clone()) } else { @@ -187,7 +186,8 @@ impl GetTransactionResponse { /// /// # Errors pub fn events(&self) -> Result, Error> { - self.result_meta + self.transaction_info + .result_meta .as_ref() .map(extract_events) .ok_or(Error::MissingOp) @@ -202,12 +202,120 @@ impl GetTransactionResponse { .filter(|e| matches!(e.event.type_, ContractEventType::Contract)) .collect::>()) } + + pub fn result(&self) -> Option<&xdr::TransactionResult> { + self.transaction_info.result.as_ref() + } + + pub fn result_meta(&self) -> Option<&xdr::TransactionMeta> { + self.transaction_info.result_meta.as_ref() + } + + pub fn envelope(&self) -> Option<&xdr::TransactionEnvelope> { + self.transaction_info.envelope.as_ref() + } +} + +#[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] +pub struct TransactionInfoRaw { + pub status: String, + #[serde(rename = "applicationOrder")] + pub application_order: Option, + #[serde(rename = "txHash", default, skip_serializing_if = "Option::is_none")] + pub transaction_hash: Option, + #[serde(rename = "feeBump")] + pub fee_bump: Option, + #[serde( + rename = "envelopeXdr", + skip_serializing_if = "Option::is_none", + default + )] + pub envelope_xdr: Option, + #[serde(rename = "resultXdr", skip_serializing_if = "Option::is_none", default)] + pub result_xdr: Option, + #[serde( + rename = "resultMetaXdr", + skip_serializing_if = "Option::is_none", + default + )] + pub result_meta_xdr: Option, + #[serde( + rename = "diagnosticEventsXdr", + skip_serializing_if = "Vec::is_empty", + default + )] + pub diagnostic_events_xdr: Vec, + #[serde(skip_serializing_if = "Option::is_none")] + pub ledger: Option, + #[serde(flatten)] + pub close_time: Option, +} + +#[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] +#[serde(untagged)] +pub enum CloseTime { + Protocol22 { + #[serde( + rename = "createdAt", + deserialize_with = "deserialize_number_from_string" + )] + ledger_close_time: i64, + }, +} + +#[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] +pub struct TransactionInfo { + pub status: String, + pub application_order: Option, + pub transaction_hash: Option, + pub fee_bump: bool, + pub envelope: Option, + pub result: Option, + pub result_meta: Option, + pub diagnostic_events_xdr: Vec, + pub ledger: Option, + pub close_time: Option, +} + +impl TransactionInfo { + pub fn ledger_close_time(&self) -> Option { + self.close_time.as_ref().map(|d| match d { + CloseTime::Protocol22 { ledger_close_time } => *ledger_close_time, + }) + } +} + +impl TryInto for TransactionInfoRaw { + type Error = xdr::Error; + fn try_into(self) -> Result { + Ok(TransactionInfo { + status: self.status, + transaction_hash: self + .transaction_hash + .as_deref() + .and_then(|x| (!x.is_empty()).then_some(x)) + .map(from_xdr) + .transpose()?, + fee_bump: self.fee_bump.unwrap_or_default(), + envelope: self.envelope_xdr.as_deref().map(from_xdr).transpose()?, + result: self.result_xdr.as_deref().map(from_xdr).transpose()?, + result_meta: self.result_meta_xdr.as_deref().map(from_xdr).transpose()?, + application_order: self.application_order, + ledger: self.ledger, + diagnostic_events_xdr: self + .diagnostic_events_xdr + .iter() + .map(|event| from_xdr(event)) + .collect::, _>>()?, + close_time: self.close_time, + }) + } } #[serde_as] #[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] pub struct GetTransactionsResponseRaw { - pub transactions: Vec, + pub transactions: Vec, #[serde(rename = "latestLedger")] pub latest_ledger: u32, #[serde(rename = "latestLedgerCloseTimestamp")] @@ -221,7 +329,7 @@ pub struct GetTransactionsResponseRaw { } #[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] pub struct GetTransactionsResponse { - pub transactions: Vec, + pub transactions: Vec, pub latest_ledger: u32, pub latest_ledger_close_time: i64, pub oldest_ledger: u32, @@ -307,20 +415,6 @@ pub struct GetLatestLedgerResponse { pub sequence: u32, } -#[derive(serde::Deserialize, serde::Serialize, Debug, Default, Clone)] -pub struct Cost { - #[serde( - rename = "cpuInsns", - deserialize_with = "deserialize_number_from_string" - )] - pub cpu_insns: u64, - #[serde( - rename = "memBytes", - deserialize_with = "deserialize_number_from_string" - )] - pub mem_bytes: u64, -} - #[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] pub struct SimulateHostFunctionResultRaw { #[serde(deserialize_with = "deserialize_default_from_null")] @@ -351,16 +445,8 @@ pub enum LedgerEntryChange { #[derive(serde::Deserialize, serde::Serialize, Debug, Default, Clone)] pub struct SimulateTransactionResponse { - #[serde( - rename = "minResourceFee", - deserialize_with = "deserialize_number_from_string", - default - )] - pub min_resource_fee: u64, - #[serde(default)] - pub cost: Cost, - #[serde(skip_serializing_if = "Vec::is_empty", default)] - pub results: Vec, + #[serde(skip_serializing_if = "Option::is_none", default)] + pub error: Option, #[serde(rename = "transactionData", default)] pub transaction_data: String, #[serde( @@ -369,6 +455,14 @@ pub struct SimulateTransactionResponse { default )] pub events: Vec, + #[serde( + rename = "minResourceFee", + deserialize_with = "deserialize_number_from_string", + default + )] + pub min_resource_fee: u64, + #[serde(skip_serializing_if = "Vec::is_empty", default)] + pub results: Vec, #[serde( rename = "restorePreamble", skip_serializing_if = "Option::is_none", @@ -383,8 +477,6 @@ pub struct SimulateTransactionResponse { pub state_changes: Option>, #[serde(rename = "latestLedger")] pub latest_ledger: u32, - #[serde(skip_serializing_if = "Option::is_none", default)] - pub error: Option, } impl SimulateTransactionResponse { @@ -398,14 +490,10 @@ impl SimulateTransactionResponse { auth: r .auth .iter() - .map(|a| { - Ok(SorobanAuthorizationEntry::from_xdr_base64( - a, - Limits::none(), - )?) - }) - .collect::>()?, - xdr: xdr::ScVal::from_xdr_base64(&r.xdr, Limits::none())?, + .map(Deref::deref) + .map(from_xdr) + .collect::>()?, + xdr: from_xdr(&r.xdr)?, }) }) .collect() @@ -414,19 +502,13 @@ impl SimulateTransactionResponse { /// /// # Errors pub fn events(&self) -> Result, Error> { - self.events - .iter() - .map(|e| Ok(DiagnosticEvent::from_xdr_base64(e, Limits::none())?)) - .collect() + self.events.iter().map(|e| Ok(from_xdr(e)?)).collect() } /// /// # Errors pub fn transaction_data(&self) -> Result { - Ok(SorobanTransactionData::from_xdr_base64( - &self.transaction_data, - Limits::none(), - )?) + Ok(from_xdr(&self.transaction_data)?) } } @@ -442,11 +524,48 @@ pub struct RestorePreamble { } #[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] -pub struct GetEventsResponse { +pub struct GetEventsResponseRaw { #[serde(deserialize_with = "deserialize_default_from_null")] - pub events: Vec, + pub events: Vec, #[serde(rename = "latestLedger")] pub latest_ledger: u32, + pub cursor: Option, +} + +#[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] +pub struct GetEventsResponse { + pub events: Vec, + pub latest_ledger: u32, + pub cursor: Option, +} + +impl TryInto for GetEventsResponseRaw { + type Error = xdr::Error; + + fn try_into(self) -> Result { + Ok(GetEventsResponse { + events: self + .events + .into_iter() + .map(TryInto::try_into) + .collect::, _>>()?, + latest_ledger: self.latest_ledger, + cursor: self.cursor, + }) + } +} + +#[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] +pub struct GetVersionInfoResponse { + pub version: String, + #[serde(rename = "commitHash")] + pub commit_hash: String, + #[serde(rename = "buildTimestamp")] + pub build_timestamp: String, + #[serde(rename = "captiveCoreVersion")] + pub captive_core_version: String, + #[serde(rename = "protocolVersion")] + pub protocol_version: u32, } // Determines whether or not a particular filter matches a topic based on the @@ -474,47 +593,82 @@ pub fn does_topic_match(topic: &[String], filter: &[String]) -> bool { } #[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] -pub struct Event { +pub struct EventRaw { #[serde(rename = "type")] pub event_type: String, - pub ledger: u32, #[serde(rename = "ledgerClosedAt")] pub ledger_closed_at: String, - - pub id: String, - #[serde(rename = "pagingToken")] - pub paging_token: String, - #[serde(rename = "contractId")] pub contract_id: String, + pub id: String, + #[serde(rename = "inSuccessfulContractCall")] + pub in_successful_contract_call: bool, + #[serde(rename = "txHash")] + pub transaction_hash: String, pub topic: Vec, pub value: String, + /// Deprecated + #[serde(rename = "pagingToken")] + pub paging_token: Option, +} + +#[derive(serde::Deserialize, serde::Serialize, Debug, Clone)] +pub struct Event { + pub event_type: String, + pub ledger: u32, + pub ledger_closed_at: String, + pub contract_id: String, + pub id: String, + pub paging_token: Option, + pub topic: Vec, + pub value: ScVal, + pub in_successful_contract_call: bool, + pub transaction_hash: Hash, +} + +impl TryInto for EventRaw { + type Error = xdr::Error; + + fn try_into(self) -> Result { + Ok(Event { + event_type: self.event_type, + ledger: self.ledger, + ledger_closed_at: self.ledger_closed_at, + contract_id: self.contract_id, + id: self.id, + paging_token: self.paging_token, + topic: self + .topic + .iter() + .map(Deref::deref) + .map(from_xdr) + .collect::>()?, + value: from_xdr(&self.value)?, + in_successful_contract_call: self.in_successful_contract_call, + transaction_hash: self.transaction_hash.parse()?, + }) + } } impl Display for Event { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - writeln!( - f, - "Event {} [{}]:", - self.paging_token, - self.event_type.to_ascii_uppercase() - )?; - writeln!( - f, - " Ledger: {} (closed at {})", - self.ledger, self.ledger_closed_at - )?; - writeln!(f, " Contract: {}", self.contract_id)?; + let Self { + id, + ledger, + ledger_closed_at, + contract_id, + value, + .. + } = self; + writeln!(f, "Event {id} [{}]:", self.event_type.to_ascii_uppercase())?; + writeln!(f, " Ledger: {ledger} (closed at {ledger_closed_at})",)?; + writeln!(f, " Contract: {contract_id}")?; writeln!(f, " Topics:")?; for topic in &self.topic { - let scval = - xdr::ScVal::from_xdr_base64(topic, Limits::none()).map_err(|_| std::fmt::Error)?; - writeln!(f, " {scval:?}")?; + writeln!(f, " {topic:?}")?; } - let scval = xdr::ScVal::from_xdr_base64(&self.value, Limits::none()) - .map_err(|_| std::fmt::Error)?; - writeln!(f, " Value: {scval:?}") + writeln!(f, " Value: {value:?}") } } @@ -543,7 +697,7 @@ impl Event { bold!(true), bold!(false), fg!(Some(Color::Green)), - self.paging_token, + self.id, reset!(), bold!(true), fg!(Some(color)), @@ -572,22 +726,20 @@ impl Event { colored!(stdout, " Topics:\n")?; for topic in &self.topic { - let scval = xdr::ScVal::from_xdr_base64(topic, Limits::none())?; colored!( stdout, " {}{:?}{}\n", fg!(Some(Color::Green)), - scval, + topic, reset!(), )?; } - let scval = xdr::ScVal::from_xdr_base64(&self.value, Limits::none())?; colored!( stdout, " Value: {}{:?}{}\n", fg!(Some(Color::Green)), - scval, + self.value, reset!(), )?; @@ -770,22 +922,22 @@ impl Client { /// /// # Errors - pub async fn get_account(&self, address: &str) -> Result { - tracing::trace!("Getting address {}", address); + pub async fn get_account(&self, address: impl Into) -> Result { + let account_id = address.into(); + tracing::trace!("Getting address {}", account_id); let key = LedgerKey::Account(LedgerKeyAccount { - account_id: AccountId(PublicKey::PublicKeyTypeEd25519(Uint256( - stellar_strkey::ed25519::PublicKey::from_string(address)?.0, - ))), + account_id: account_id.clone(), }); let keys = Vec::from([key]); let response = self.get_ledger_entries(&keys).await?; let entries = response.entries.unwrap_or_default(); if entries.is_empty() { - return Err(Error::NotFound("Account".to_string(), address.to_owned())); + return Err(Error::NotFound( + "Account".to_string(), + account_id.to_string(), + )); } - let ledger_entry = &entries[0]; - let mut read = Limited::new(ledger_entry.xdr.as_bytes(), Limits::none()); - if let LedgerEntryData::Account(entry) = LedgerEntryData::read_xdr_base64(&mut read)? { + if let LedgerEntryData::Account(entry) = from_xdr(&entries[0].xdr)? { tracing::trace!(account=?entry); Ok(entry) } else { @@ -814,14 +966,9 @@ impl Client { if status == "ERROR" { let error = error_result_xdr + .as_deref() .ok_or(Error::MissingError) - .and_then(|x| { - TransactionResult::read_xdr_base64(&mut Limited::new( - x.as_bytes(), - Limits::none(), - )) - .map_err(|_| Error::InvalidResponse) - }) + .and_then(|x| from_xdr::(x).map_err(|_| Error::InvalidResponse)) .map(|r| r.result); tracing::error!("TXN {hash} failed:\n {error:#?}"); return Err(Error::TransactionSubmissionFailed(format!("{:#?}", error?))); @@ -909,7 +1056,7 @@ impl Client { let mut sleep_time = Duration::from_secs(1); loop { let response = self.get_transaction(tx_id).await?; - match response.status.as_str() { + match response.transaction_info.status.as_str() { "SUCCESS" => { // TODO: the caller should probably be printing this tracing::trace!("{response:#?}"); @@ -920,12 +1067,14 @@ impl Client { // TODO: provide a more elaborate error return Err(Error::TransactionSubmissionFailed(format!( "{:#?}", - response.result + response.transaction_info.result ))); } "NOT_FOUND" => (), _ => { - return Err(Error::UnexpectedTransactionStatus(response.status)); + return Err(Error::UnexpectedTransactionStatus( + response.transaction_info.status, + )); } }; if start.elapsed() > timeout { @@ -942,14 +1091,10 @@ impl Client { &self, keys: &[LedgerKey], ) -> Result { - let mut base64_keys: Vec = vec![]; - for k in keys { - let base64_result = k.to_xdr_base64(Limits::none()); - if base64_result.is_err() { - return Err(Error::Xdr(XdrError::Invalid)); - } - base64_keys.push(k.to_xdr_base64(Limits::none())?); - } + let base64_keys = keys + .iter() + .map(|k| k.to_xdr_base64(Limits::none())) + .collect::, _>>()?; let mut oparams = ObjectParams::new(); oparams.insert("keys", base64_keys)?; Ok(self.client().request("getLedgerEntries", oparams).await?) @@ -983,8 +1128,8 @@ impl Client { live_until_ledger_seq_ledger_seq, }| { Ok(FullLedgerEntry { - key: LedgerKey::from_xdr_base64(key, Limits::none())?, - val: LedgerEntryData::from_xdr_base64(xdr, Limits::none())?, + key: from_xdr(key)?, + val: from_xdr(xdr)?, live_until_ledger_seq: live_until_ledger_seq_ledger_seq.unwrap_or_default(), last_modified_ledger: *last_modified_ledger, }) @@ -1034,8 +1179,8 @@ impl Client { }; oparams.insert("filters", vec![filters])?; oparams.insert("pagination", pagination)?; - - Ok(self.client().request("getEvents", oparams).await?) + let resp: GetEventsResponseRaw = self.client().request("getEvents", oparams).await?; + Ok(resp.try_into()?) } /// @@ -1057,7 +1202,7 @@ impl Client { return Err(Error::NotFound("Contract".to_string(), contract_address)); } let contract_ref_entry = &entries[0]; - match LedgerEntryData::from_xdr_base64(&contract_ref_entry.xdr, Limits::none())? { + match from_xdr::(&contract_ref_entry.xdr)? { LedgerEntryData::ContractData(contract_data) => Ok(contract_data), scval => Err(Error::UnexpectedContractCodeDataType(scval)), } @@ -1094,7 +1239,7 @@ impl Client { )); } let contract_data_entry = &entries[0]; - match LedgerEntryData::from_xdr_base64(&contract_data_entry.xdr, Limits::none())? { + match from_xdr::(&contract_data_entry.xdr)? { LedgerEntryData::ContractCode(xdr::ContractCodeEntry { code, .. }) => Ok(code.into()), scval => Err(Error::UnexpectedContractCodeDataType(scval)), } @@ -1114,6 +1259,16 @@ impl Client { scval => Err(Error::UnexpectedContractInstance(scval)), } } + + /// Get Version Info + /// # Errors + /// - Could fail to get version info or have a network error + pub async fn get_version_info(&self) -> Result { + Ok(self + .client() + .request("getVersionInfo", ObjectParams::new()) + .await?) + } } fn extract_events(tx_meta: &TransactionMeta) -> Vec { @@ -1199,26 +1354,25 @@ mod tests { panic!("Could not find repository root"); } - #[test] - fn test_parse_get_transactions_response() { + fn read_fixture_file(filename: &str) -> T { let repo_root = get_repo_root(); - let fixture_path = repo_root - .join("src") - .join("fixtures") - .join("transactions_response.json"); - let response_content = - fs::read_to_string(fixture_path).expect("Failed to read transactions_response.json"); - + let fixture_path = repo_root.join("src").join("fixtures").join(filename); + let response_content: String = + fs::read_to_string(fixture_path).expect("Failed to read fixture file"); // Parse the entire response let full_response: serde_json::Value = serde_json::from_str(&response_content) - .expect("Failed to parse JSON from transactions_response.json"); + .unwrap_or_else(|_| panic!("Failed to parse JSON from {filename}")); // Extract the "result" field let result = full_response["result"].clone(); // Parse the "result" content as GetTransactionsResponseRaw - let raw_response: GetTransactionsResponseRaw = serde_json::from_value(result) - .expect("Failed to parse 'result' into GetTransactionsResponseRaw"); + serde_json::from_value(result).expect("Failed to parse 'result'") + } + #[test] + fn parse_get_transactions_response() { + let raw_response: GetTransactionsResponseRaw = + read_fixture_file("curr_transactions_response.json"); // Convert GetTransactionsResponseRaw to GetTransactionsResponse let response: GetTransactionsResponse = raw_response .try_into() @@ -1231,12 +1385,87 @@ mod tests { // Additional assertions for specific transaction attributes assert_eq!(response.transactions[0].status, "SUCCESS"); - //assert_eq!(response.transactions[0].application_order, 1); - //assert_eq!(response.transactions[0].ledger, 554000); + assert_eq!(response.transactions[0].application_order, Some(1)); + assert_eq!(response.transactions[0].ledger, Some(554_000)); + assert_eq!( + response.transactions[0].ledger_close_time(), + Some(1_721_053_660) + ); + } + + #[test] + fn parse_get_transaction_response() { + // Parse the "result" content as GetTransactionsResponseRaw + let raw_response: GetTransactionResponseRaw = + read_fixture_file("curr_transaction_response.json"); + // Convert GetTransactionsResponseRaw to GetTransactionsResponse + let response: GetTransactionResponse = raw_response + .try_into() + .expect("Failed to convert GetTransactionsResponseRaw to GetTransactionsResponse"); + assert_eq!(response.transaction_info.diagnostic_events_xdr.len(), 21); + assert_eq!(response.transaction_info.status, "SUCCESS"); + assert_eq!(response.transaction_info.application_order, Some(251)); + assert_eq!( + response.transaction_info.ledger_close_time(), + Some(1_728_063_066) + ); + assert_eq!(response.latest_ledger, 53_794_558); + assert_eq!(response.oldest_ledger, 53_777_279); + assert_eq!(response.oldest_ledger_close_time, 1_727_963_878); + assert_eq!(response.latest_ledger_close_time, 1_728_063_258); + assert_eq!(response.transaction_info.ledger, Some(53_794_524)); + } + + #[test] + fn parse_new_get_transaction_response() { + // Parse the "result" content as GetTransactionsResponseRaw + let raw_response: GetTransactionResponseRaw = + read_fixture_file("new_transaction_response.json"); + println!("{raw_response:#?}"); + // Convert GetTransactionsResponseRaw to GetTransactionsResponse + let response: GetTransactionResponse = raw_response + .try_into() + .expect("Failed to convert GetTransactionsResponseRaw to GetTransactionsResponse"); + assert_eq!(response.transaction_info.diagnostic_events_xdr.len(), 21); + assert_eq!(response.transaction_info.status, "SUCCESS"); + assert_eq!(response.transaction_info.application_order, Some(1)); + assert_eq!( + response.transaction_info.ledger_close_time(), + Some(1_728_668_111) + ); + assert_eq!(response.latest_ledger, 525); + assert_eq!(response.oldest_ledger, 8); + assert_eq!(response.oldest_ledger_close_time, 1_728_667_648); + assert_eq!(response.latest_ledger_close_time, 1_728_668_165); + assert_eq!(response.transaction_info.ledger, Some(471)); + assert!(!response.transaction_info.fee_bump); + assert!(response.transaction_info.transaction_hash.is_none()); + } + + #[test] + fn parse_curr_simulation_response() { + let raw_response: SimulateTransactionResponse = + read_fixture_file("curr_simulation_response.json"); + assert_eq!(raw_response.min_resource_fee, 92487); + assert_eq!(raw_response.latest_ledger, 53_795_023); + assert_eq!(raw_response.results.len(), 1); + assert_eq!(raw_response.events().unwrap().len(), 2); + } + + #[test] + fn parse_new_get_events_response() { + let raw_response: GetEventsResponseRaw = read_fixture_file("new_event_response.json"); + let response: GetEventsResponse = raw_response.try_into().unwrap(); + assert_eq!(response.latest_ledger, 3266); + assert_eq!( + response.cursor.as_deref(), + Some("0000012859132096512-0000000017") + ); + assert_eq!(response.events.len(), 100); } #[test] - fn test_rpc_url_default_ports() { + fn rpc_url_default_ports() { // Default ports are added. let client = Client::new("http://example.com").unwrap(); assert_eq!(client.base_url(), "http://example.com:80/"); @@ -1267,7 +1496,7 @@ mod tests { #[test] // Taken from [RPC server // tests](https://github.com/stellar/soroban-tools/blob/main/cmd/soroban-rpc/internal/methods/get_events_test.go#L21). - fn test_does_topic_match() { + fn topic_match() { struct TestCase<'a> { name: &'a str, filter: Vec<&'a str>,