diff --git a/rust/Cargo.lock b/rust/Cargo.lock index f5ea5c716..ed2657dbb 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -199,9 +199,9 @@ dependencies = [ [[package]] name = "aptos-indexer-test-transactions" version = "1.0.0" -source = "git+https://github.com/aptos-labs/aptos-core.git?rev=b91d6bfe955e0df12927ae06f44c9763f5f016d3#b91d6bfe955e0df12927ae06f44c9763f5f016d3" +source = "git+https://github.com/aptos-labs/aptos-core.git?rev=6f64aea8e5aba9207ffce13060b8bdd031a8de31#6f64aea8e5aba9207ffce13060b8bdd031a8de31" dependencies = [ - "aptos-protos 1.3.1 (git+https://github.com/aptos-labs/aptos-core.git?rev=b91d6bfe955e0df12927ae06f44c9763f5f016d3)", + "aptos-protos 1.3.1 (git+https://github.com/aptos-labs/aptos-core.git?rev=6f64aea8e5aba9207ffce13060b8bdd031a8de31)", "serde_json", ] @@ -309,7 +309,7 @@ dependencies = [ [[package]] name = "aptos-protos" version = "1.3.1" -source = "git+https://github.com/aptos-labs/aptos-core.git?rev=b91d6bfe955e0df12927ae06f44c9763f5f016d3#b91d6bfe955e0df12927ae06f44c9763f5f016d3" +source = "git+https://github.com/aptos-labs/aptos-core.git?rev=6f64aea8e5aba9207ffce13060b8bdd031a8de31#6f64aea8e5aba9207ffce13060b8bdd031a8de31" dependencies = [ "pbjson", "prost 0.13.4", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index b5d51df30..35572a9e0 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -31,7 +31,7 @@ anyhow = "1.0.86" aptos-indexer-processor-sdk = { git = "https://github.com/aptos-labs/aptos-indexer-processor-sdk.git", rev = "b79ed8b5864b2a12a1f9c5fd01579462e029b2ae" } aptos-indexer-processor-sdk-server-framework = { git = "https://github.com/aptos-labs/aptos-indexer-processor-sdk.git", rev = "b79ed8b5864b2a12a1f9c5fd01579462e029b2ae" } aptos-protos = { git = "https://github.com/aptos-labs/aptos-core.git", rev = "1d8460a995503574ec4e9699d3442d0150d7f3b9" } -aptos-indexer-test-transactions = { git = "https://github.com/aptos-labs/aptos-core.git", rev = "b91d6bfe955e0df12927ae06f44c9763f5f016d3" } +aptos-indexer-test-transactions = { git = "https://github.com/aptos-labs/aptos-core.git", rev = "6f64aea8e5aba9207ffce13060b8bdd031a8de31" } aptos-indexer-testing-framework = { git = "https://github.com/aptos-labs/aptos-indexer-processor-sdk.git", rev = "b79ed8b5864b2a12a1f9c5fd01579462e029b2ae" } async-trait = "0.1.53" backtrace = "0.3.58" diff --git a/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/coin_supply.json b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/coin_supply.json new file mode 100644 index 000000000..c209075f3 --- /dev/null +++ b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/coin_supply.json @@ -0,0 +1,18 @@ +[ + { + "transaction_version": 2308282694, + "coin_type_hash": "91ceb1308a98389691e05158b07ed5f079ab78461a6bb8d5a4054b1bb5cb8bb6", + "coin_type": "0x1::aptos_coin::AptosCoin", + "supply": "113830046844937808", + "transaction_timestamp": "2025-02-01T17:05:00", + "transaction_epoch": 10169 + }, + { + "transaction_version": 2308283617, + "coin_type_hash": "91ceb1308a98389691e05158b07ed5f079ab78461a6bb8d5a4054b1bb5cb8bb6", + "coin_type": "0x1::aptos_coin::AptosCoin", + "supply": "113830046828042038", + "transaction_timestamp": "2025-02-01T17:05:15", + "transaction_epoch": 10169 + } +] \ No newline at end of file diff --git a/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/current_fungible_asset_balances.json b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/current_fungible_asset_balances.json new file mode 100644 index 000000000..e78ec86b7 --- /dev/null +++ b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/current_fungible_asset_balances.json @@ -0,0 +1,192 @@ +[ + { + "storage_id": "0x2829f224066c8b5a925d277e88c9ff7f72b44c40b01a0995f1e2773ebaeca412", + "owner_address": "0x3656f551dbdddb61a5e0956b8f64fd9f9d20c48c9f8f2a07551072fd15a3cddb", + "asset_type_v2": null, + "asset_type_v1": "0x1::aptos_coin::AptosCoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "115070470560", + "amount_v2": null, + "amount": "115070470560", + "last_transaction_version_v1": 2308283617, + "last_transaction_version_v2": null, + "last_transaction_version": 2308283617, + "last_transaction_timestamp_v1": "2025-02-01T17:05:15", + "last_transaction_timestamp_v2": null, + "last_transaction_timestamp": "2025-02-01T17:05:15", + "token_standard": "v1", + "asset_type": "0x1::aptos_coin::AptosCoin" + }, + { + "storage_id": "0x3adab3cb7723d75180dae65c7e75802cd9adec7eb387f50bec250d33d3313d36", + "owner_address": "0xb7cb159db88215cd1670edfe4e30df58177571610983fc06681f4c9773810b3e", + "asset_type_v2": null, + "asset_type_v1": "0x1::aptos_coin::AptosCoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "0", + "amount_v2": null, + "amount": "0", + "last_transaction_version_v1": 2308282694, + "last_transaction_version_v2": null, + "last_transaction_version": 2308282694, + "last_transaction_timestamp_v1": "2025-02-01T17:05:00", + "last_transaction_timestamp_v2": null, + "last_transaction_timestamp": "2025-02-01T17:05:00", + "token_standard": "v1", + "asset_type": "0x1::aptos_coin::AptosCoin" + }, + { + "storage_id": "0x48e8342e9d33174172b0ef9f0a8333018f174a41de02d90bce68f46994e15917", + "owner_address": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d", + "asset_type_v2": null, + "asset_type_v1": "0x1::aptos_coin::AptosCoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "912327475722", + "amount_v2": null, + "amount": "912327475722", + "last_transaction_version_v1": 2308282694, + "last_transaction_version_v2": null, + "last_transaction_version": 2308282694, + "last_transaction_timestamp_v1": "2025-02-01T17:05:00", + "last_transaction_timestamp_v2": null, + "last_transaction_timestamp": "2025-02-01T17:05:00", + "token_standard": "v1", + "asset_type": "0x1::aptos_coin::AptosCoin" + }, + { + "storage_id": "0x591c18b4621f2e4703febc771289065882f612e059b9734c49ad56101dd43b7f", + "owner_address": "0xc05e013f9f81d699e5a991bd134ab8a9af4ec609714f1fd8bfce4fc38419c890", + "asset_type_v2": null, + "asset_type_v1": "0x1::aptos_coin::AptosCoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "114558714630", + "amount_v2": null, + "amount": "114558714630", + "last_transaction_version_v1": 2308282694, + "last_transaction_version_v2": null, + "last_transaction_version": 2308282694, + "last_transaction_timestamp_v1": "2025-02-01T17:05:00", + "last_transaction_timestamp_v2": null, + "last_transaction_timestamp": "2025-02-01T17:05:00", + "token_standard": "v1", + "asset_type": "0x1::aptos_coin::AptosCoin" + }, + { + "storage_id": "0x6633f87950212c7ae22c5eb4410589fe265ffc046ad64b32d30091b6278ef1d0", + "owner_address": "0x17ca1ee00a2baaee0a0419bd8ef25489b96ece1906881ae702b317eefd940076", + "asset_type_v2": "0x3be35c307c15290ec13c2294d40129ddd27e5b96050ec8d43b8aa30255957088", + "asset_type_v1": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d::coin_factory::Emojicoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "121586567739", + "amount_v2": "100000000", + "amount": "121686567739", + "last_transaction_version_v1": 2308282694, + "last_transaction_version_v2": 2308283617, + "last_transaction_version": 2308283617, + "last_transaction_timestamp_v1": "2025-02-01T17:05:00", + "last_transaction_timestamp_v2": "2025-02-01T17:05:15", + "last_transaction_timestamp": "2025-02-01T17:05:15", + "token_standard": "v1", + "asset_type": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d::coin_factory::Emojicoin" + }, + { + "storage_id": "0x6c30c7bce63ed412137a0d61c8c6e7e78c3cd0b07bc7a297b8920cef8d9eda89", + "owner_address": "0x97670e81558c0389314f57e9b14c18db37ec7a823747c1bac176553d07446653", + "asset_type_v2": "0x3be35c307c15290ec13c2294d40129ddd27e5b96050ec8d43b8aa30255957088", + "asset_type_v1": null, + "is_primary": false, + "is_frozen": false, + "amount_v1": null, + "amount_v2": "84903000000", + "amount": "84903000000", + "last_transaction_version_v1": null, + "last_transaction_version_v2": 2308283617, + "last_transaction_version": 2308283617, + "last_transaction_timestamp_v1": null, + "last_transaction_timestamp_v2": "2025-02-01T17:05:15", + "last_transaction_timestamp": "2025-02-01T17:05:15", + "token_standard": "v2", + "asset_type": "0x3be35c307c15290ec13c2294d40129ddd27e5b96050ec8d43b8aa30255957088" + }, + { + "storage_id": "0xbc52b11f809e5c13236f3ec3296f56259b7bee9898d47efd621354083adb97d9", + "owner_address": "0xd0b17bea776bb87b70b2fb2ca631014f0ca94fc1acde4b8ff1a763f4172aa6c4", + "asset_type_v2": null, + "asset_type_v1": "0x1::aptos_coin::AptosCoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "42543253825", + "amount_v2": null, + "amount": "42543253825", + "last_transaction_version_v1": 2308282694, + "last_transaction_version_v2": null, + "last_transaction_version": 2308282694, + "last_transaction_timestamp_v1": "2025-02-01T17:05:00", + "last_transaction_timestamp_v2": null, + "last_transaction_timestamp": "2025-02-01T17:05:00", + "token_standard": "v1", + "asset_type": "0x1::aptos_coin::AptosCoin" + }, + { + "storage_id": "0xc4fc38001ad5d8c1d85b6908c284deb29cc94faf5219061a3db6443397ba3fbf", + "owner_address": "0x17ca1ee00a2baaee0a0419bd8ef25489b96ece1906881ae702b317eefd940076", + "asset_type_v2": null, + "asset_type_v1": "0x1::aptos_coin::AptosCoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "183280722", + "amount_v2": null, + "amount": "183280722", + "last_transaction_version_v1": 2308282694, + "last_transaction_version_v2": null, + "last_transaction_version": 2308282694, + "last_transaction_timestamp_v1": "2025-02-01T17:05:00", + "last_transaction_timestamp_v2": null, + "last_transaction_timestamp": "2025-02-01T17:05:00", + "token_standard": "v1", + "asset_type": "0x1::aptos_coin::AptosCoin" + }, + { + "storage_id": "0xc6fa431d283690e248c267e56f8062a49d09e81747b85cc5239d0590c40c6a45", + "owner_address": "0xb7cb159db88215cd1670edfe4e30df58177571610983fc06681f4c9773810b3e", + "asset_type_v2": null, + "asset_type_v1": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d::coin_factory::Emojicoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "0", + "amount_v2": null, + "amount": "0", + "last_transaction_version_v1": 2308282694, + "last_transaction_version_v2": null, + "last_transaction_version": 2308282694, + "last_transaction_timestamp_v1": "2025-02-01T17:05:00", + "last_transaction_timestamp_v2": null, + "last_transaction_timestamp": "2025-02-01T17:05:00", + "token_standard": "v1", + "asset_type": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d::coin_factory::Emojicoin" + }, + { + "storage_id": "0xea2c6900b9e681af5478e679b2d20bb5f73d30534f8a420601cd019997d2e0f6", + "owner_address": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d", + "asset_type_v2": null, + "asset_type_v1": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d::coin_factory::Emojicoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "187091465210174", + "amount_v2": null, + "amount": "187091465210174", + "last_transaction_version_v1": 2308282694, + "last_transaction_version_v2": null, + "last_transaction_version": 2308282694, + "last_transaction_timestamp_v1": "2025-02-01T17:05:00", + "last_transaction_timestamp_v2": null, + "last_transaction_timestamp": "2025-02-01T17:05:00", + "token_standard": "v1", + "asset_type": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d::coin_factory::Emojicoin" + } +] \ No newline at end of file diff --git a/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/fungible_asset_activities.json b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/fungible_asset_activities.json new file mode 100644 index 000000000..94e712b16 --- /dev/null +++ b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/fungible_asset_activities.json @@ -0,0 +1,236 @@ +[ + { + "transaction_version": 2308282694, + "event_index": -1, + "owner_address": "0x17ca1ee00a2baaee0a0419bd8ef25489b96ece1906881ae702b317eefd940076", + "storage_id": "0xc4fc38001ad5d8c1d85b6908c284deb29cc94faf5219061a3db6443397ba3fbf", + "asset_type": "0x1::aptos_coin::AptosCoin", + "is_frozen": null, + "amount": "12000", + "type_": "0x1::aptos_coin::GasFeeEvent", + "is_gas_fee": true, + "gas_fee_payer_address": "0xc05e013f9f81d699e5a991bd134ab8a9af4ec609714f1fd8bfce4fc38419c890", + "is_transaction_success": true, + "entry_function_id_str": "0x1c3206329806286fd2223647c9f9b130e66baeb6d7224a18c1f642ffe48f3b4c::panora_swap::router_entry", + "block_height": 284832501, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:00", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308282694, + "event_index": 0, + "owner_address": "0x17ca1ee00a2baaee0a0419bd8ef25489b96ece1906881ae702b317eefd940076", + "storage_id": "0xc4fc38001ad5d8c1d85b6908c284deb29cc94faf5219061a3db6443397ba3fbf", + "asset_type": "0x1::aptos_coin::AptosCoin", + "is_frozen": null, + "amount": "600000000", + "type_": "0x1::coin::WithdrawEvent", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x1c3206329806286fd2223647c9f9b130e66baeb6d7224a18c1f642ffe48f3b4c::panora_swap::router_entry", + "block_height": 284832501, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:00", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308282694, + "event_index": 1, + "owner_address": "0xb7cb159db88215cd1670edfe4e30df58177571610983fc06681f4c9773810b3e", + "storage_id": "0x3adab3cb7723d75180dae65c7e75802cd9adec7eb387f50bec250d33d3313d36", + "asset_type": "0x1::aptos_coin::AptosCoin", + "is_frozen": null, + "amount": "600000000", + "type_": "0x1::coin::DepositEvent", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x1c3206329806286fd2223647c9f9b130e66baeb6d7224a18c1f642ffe48f3b4c::panora_swap::router_entry", + "block_height": 284832501, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:00", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308282694, + "event_index": 4, + "owner_address": "0xb7cb159db88215cd1670edfe4e30df58177571610983fc06681f4c9773810b3e", + "storage_id": "0x3adab3cb7723d75180dae65c7e75802cd9adec7eb387f50bec250d33d3313d36", + "asset_type": "0x1::aptos_coin::AptosCoin", + "is_frozen": null, + "amount": "600000000", + "type_": "0x1::coin::WithdrawEvent", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x1c3206329806286fd2223647c9f9b130e66baeb6d7224a18c1f642ffe48f3b4c::panora_swap::router_entry", + "block_height": 284832501, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:00", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308282694, + "event_index": 5, + "owner_address": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d", + "storage_id": "0x48e8342e9d33174172b0ef9f0a8333018f174a41de02d90bce68f46994e15917", + "asset_type": "0x1::aptos_coin::AptosCoin", + "is_frozen": null, + "amount": "594000000", + "type_": "0x1::coin::DepositEvent", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x1c3206329806286fd2223647c9f9b130e66baeb6d7224a18c1f642ffe48f3b4c::panora_swap::router_entry", + "block_height": 284832501, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:00", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308282694, + "event_index": 6, + "owner_address": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d", + "storage_id": "0xea2c6900b9e681af5478e679b2d20bb5f73d30534f8a420601cd019997d2e0f6", + "asset_type": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d::coin_factory::Emojicoin", + "is_frozen": null, + "amount": "121586320899", + "type_": "0x1::coin::WithdrawEvent", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x1c3206329806286fd2223647c9f9b130e66baeb6d7224a18c1f642ffe48f3b4c::panora_swap::router_entry", + "block_height": 284832501, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:00", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308282694, + "event_index": 7, + "owner_address": "0xb7cb159db88215cd1670edfe4e30df58177571610983fc06681f4c9773810b3e", + "storage_id": "0xc6fa431d283690e248c267e56f8062a49d09e81747b85cc5239d0590c40c6a45", + "asset_type": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d::coin_factory::Emojicoin", + "is_frozen": null, + "amount": "121586320899", + "type_": "0x1::coin::DepositEvent", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x1c3206329806286fd2223647c9f9b130e66baeb6d7224a18c1f642ffe48f3b4c::panora_swap::router_entry", + "block_height": 284832501, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:00", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308282694, + "event_index": 8, + "owner_address": "0xd0b17bea776bb87b70b2fb2ca631014f0ca94fc1acde4b8ff1a763f4172aa6c4", + "storage_id": "0xbc52b11f809e5c13236f3ec3296f56259b7bee9898d47efd621354083adb97d9", + "asset_type": "0x1::aptos_coin::AptosCoin", + "is_frozen": null, + "amount": "6000000", + "type_": "0x1::coin::DepositEvent", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x1c3206329806286fd2223647c9f9b130e66baeb6d7224a18c1f642ffe48f3b4c::panora_swap::router_entry", + "block_height": 284832501, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:00", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308282694, + "event_index": 11, + "owner_address": "0xb7cb159db88215cd1670edfe4e30df58177571610983fc06681f4c9773810b3e", + "storage_id": "0xc6fa431d283690e248c267e56f8062a49d09e81747b85cc5239d0590c40c6a45", + "asset_type": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d::coin_factory::Emojicoin", + "is_frozen": null, + "amount": "121586320899", + "type_": "0x1::coin::WithdrawEvent", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x1c3206329806286fd2223647c9f9b130e66baeb6d7224a18c1f642ffe48f3b4c::panora_swap::router_entry", + "block_height": 284832501, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:00", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308282694, + "event_index": 14, + "owner_address": "0x17ca1ee00a2baaee0a0419bd8ef25489b96ece1906881ae702b317eefd940076", + "storage_id": "0x6633f87950212c7ae22c5eb4410589fe265ffc046ad64b32d30091b6278ef1d0", + "asset_type": "0x17740e230cb5ac3f6eb16135fa1ce02baf9a07f2acfa884b33b0fb2f1bc2b91d::coin_factory::Emojicoin", + "is_frozen": null, + "amount": "121586320899", + "type_": "0x1::coin::DepositEvent", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x1c3206329806286fd2223647c9f9b130e66baeb6d7224a18c1f642ffe48f3b4c::panora_swap::router_entry", + "block_height": 284832501, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:00", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308283617, + "event_index": -1, + "owner_address": "0x17ca1ee00a2baaee0a0419bd8ef25489b96ece1906881ae702b317eefd940076", + "storage_id": "0xc4fc38001ad5d8c1d85b6908c284deb29cc94faf5219061a3db6443397ba3fbf", + "asset_type": "0x1::aptos_coin::AptosCoin", + "is_frozen": null, + "amount": "58400", + "type_": "0x1::aptos_coin::GasFeeEvent", + "is_gas_fee": true, + "gas_fee_payer_address": "0x3656f551dbdddb61a5e0956b8f64fd9f9d20c48c9f8f2a07551072fd15a3cddb", + "is_transaction_success": true, + "entry_function_id_str": "0x67b0be11ef916e46d0d045ddde44285cde84df2e314682b32e22a1d32f4bc0a0::PanoraClaims::claim", + "block_height": 284832579, + "token_standard": "v1", + "transaction_timestamp": "2025-02-01T17:05:15", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308283617, + "event_index": 0, + "owner_address": "0x97670e81558c0389314f57e9b14c18db37ec7a823747c1bac176553d07446653", + "storage_id": "0x6c30c7bce63ed412137a0d61c8c6e7e78c3cd0b07bc7a297b8920cef8d9eda89", + "asset_type": "0x3be35c307c15290ec13c2294d40129ddd27e5b96050ec8d43b8aa30255957088", + "is_frozen": null, + "amount": "100000000", + "type_": "0x1::fungible_asset::Withdraw", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x67b0be11ef916e46d0d045ddde44285cde84df2e314682b32e22a1d32f4bc0a0::PanoraClaims::claim", + "block_height": 284832579, + "token_standard": "v2", + "transaction_timestamp": "2025-02-01T17:05:15", + "storage_refund_amount": "0" + }, + { + "transaction_version": 2308283617, + "event_index": 1, + "owner_address": "0x17ca1ee00a2baaee0a0419bd8ef25489b96ece1906881ae702b317eefd940076", + "storage_id": "0x6633f87950212c7ae22c5eb4410589fe265ffc046ad64b32d30091b6278ef1d0", + "asset_type": "0x3be35c307c15290ec13c2294d40129ddd27e5b96050ec8d43b8aa30255957088", + "is_frozen": null, + "amount": "100000000", + "type_": "0x1::fungible_asset::Deposit", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x67b0be11ef916e46d0d045ddde44285cde84df2e314682b32e22a1d32f4bc0a0::PanoraClaims::claim", + "block_height": 284832579, + "token_standard": "v2", + "transaction_timestamp": "2025-02-01T17:05:15", + "storage_refund_amount": "0" + } +] \ No newline at end of file diff --git a/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/fungible_asset_balances.json b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/fungible_asset_balances.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/fungible_asset_balances.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/fungible_asset_metadata.json b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/fungible_asset_metadata.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/asset_type_null/fungible_asset_metadata.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/coin_supply.json b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/coin_supply.json new file mode 100644 index 000000000..9dbbad049 --- /dev/null +++ b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/coin_supply.json @@ -0,0 +1,18 @@ +[ + { + "transaction_version": 1680592683, + "coin_type_hash": "91ceb1308a98389691e05158b07ed5f079ab78461a6bb8d5a4054b1bb5cb8bb6", + "coin_type": "0x1::aptos_coin::AptosCoin", + "supply": "111442820397688086", + "transaction_timestamp": "2024-09-05T11:52:16", + "transaction_epoch": 8371 + }, + { + "transaction_version": 1957950162, + "coin_type_hash": "91ceb1308a98389691e05158b07ed5f079ab78461a6bb8d5a4054b1bb5cb8bb6", + "coin_type": "0x1::aptos_coin::AptosCoin", + "supply": "112743621173497128", + "transaction_timestamp": "2024-11-23T22:32:30", + "transaction_epoch": 9331 + } +] \ No newline at end of file diff --git a/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/current_fungible_asset_balances.json b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/current_fungible_asset_balances.json new file mode 100644 index 000000000..dae8cce2c --- /dev/null +++ b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/current_fungible_asset_balances.json @@ -0,0 +1,78 @@ +[ + { + "storage_id": "0x1734f2619bb775e59d04469663b9c05614b5ada6afbf2f750095f43cb8d41e40", + "owner_address": "0x345ced5d7c67360d61a1d59d8cd83cb53095a81aa24a337027391b1c7dd1786f", + "asset_type_v2": null, + "asset_type_v1": "0x1::aptos_coin::AptosCoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "115245132", + "amount_v2": null, + "amount": "115245132", + "last_transaction_version_v1": 1957950162, + "last_transaction_version_v2": null, + "last_transaction_version": 1957950162, + "last_transaction_timestamp_v1": "2024-11-23T22:32:30", + "last_transaction_timestamp_v2": null, + "last_transaction_timestamp": "2024-11-23T22:32:30", + "token_standard": "v1", + "asset_type": "0x1::aptos_coin::AptosCoin" + }, + { + "storage_id": "0xa1ddab83c8209aabffc66264730ba95bcc7d7a7966192c00d800ab734729622c", + "owner_address": "0x7ae7cc51c4fab67181a969f53a5d01a292dad0baf259c92c4e1a13f056768e1c", + "asset_type_v2": "0x878370592f9129e14b76558689a4b570ad22678111df775befbfcbc9fb3d90ab", + "asset_type_v1": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06::mkl_token::MKL", + "is_primary": true, + "is_frozen": false, + "amount_v1": null, + "amount_v2": "431101567356", + "amount": "431101567356", + "last_transaction_version_v1": null, + "last_transaction_version_v2": 1957950162, + "last_transaction_version": 1957950162, + "last_transaction_timestamp_v1": null, + "last_transaction_timestamp_v2": "2024-11-23T22:32:30", + "last_transaction_timestamp": "2024-11-23T22:32:30", + "token_standard": "v1", + "asset_type": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06::mkl_token::MKL" + }, + { + "storage_id": "0xd29b17433643769f27d89851553ec2ab5e4204b66eceecb6eec774668117c3e0", + "owner_address": "0x345ced5d7c67360d61a1d59d8cd83cb53095a81aa24a337027391b1c7dd1786f", + "asset_type_v2": "0x878370592f9129e14b76558689a4b570ad22678111df775befbfcbc9fb3d90ab", + "asset_type_v1": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06::mkl_token::MKL", + "is_primary": true, + "is_frozen": false, + "amount_v1": null, + "amount_v2": "3643926", + "amount": "3643926", + "last_transaction_version_v1": null, + "last_transaction_version_v2": 1957950162, + "last_transaction_version": 1957950162, + "last_transaction_timestamp_v1": null, + "last_transaction_timestamp_v2": "2024-11-23T22:32:30", + "last_transaction_timestamp": "2024-11-23T22:32:30", + "token_standard": "v1", + "asset_type": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06::mkl_token::MKL" + }, + { + "storage_id": "0xfa4e15c47bc6b38cc404cf08e30e69fd14ff2cc82b136ef3630445a66605653c", + "owner_address": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06", + "asset_type_v2": null, + "asset_type_v1": "0x1::aptos_coin::AptosCoin", + "is_primary": true, + "is_frozen": false, + "amount_v1": "997323833", + "amount_v2": null, + "amount": "997323833", + "last_transaction_version_v1": 1680592683, + "last_transaction_version_v2": null, + "last_transaction_version": 1680592683, + "last_transaction_timestamp_v1": "2024-09-05T11:52:16", + "last_transaction_timestamp_v2": null, + "last_transaction_timestamp": "2024-09-05T11:52:16", + "token_standard": "v1", + "asset_type": "0x1::aptos_coin::AptosCoin" + } +] \ No newline at end of file diff --git a/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/fungible_asset_activities.json b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/fungible_asset_activities.json new file mode 100644 index 000000000..ecd37babc --- /dev/null +++ b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/fungible_asset_activities.json @@ -0,0 +1,74 @@ +[ + { + "transaction_version": 1680592683, + "event_index": -1, + "owner_address": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06", + "storage_id": "0xfa4e15c47bc6b38cc404cf08e30e69fd14ff2cc82b136ef3630445a66605653c", + "asset_type": "0x1::aptos_coin::AptosCoin", + "is_frozen": null, + "amount": "205700", + "type_": "0x1::aptos_coin::GasFeeEvent", + "is_gas_fee": true, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06::managed_mkl_token::initialize_module", + "block_height": 222731447, + "token_standard": "v1", + "transaction_timestamp": "2024-09-05T11:52:16", + "storage_refund_amount": "47280" + }, + { + "transaction_version": 1957950162, + "event_index": -1, + "owner_address": "0x345ced5d7c67360d61a1d59d8cd83cb53095a81aa24a337027391b1c7dd1786f", + "storage_id": "0x1734f2619bb775e59d04469663b9c05614b5ada6afbf2f750095f43cb8d41e40", + "asset_type": "0x1::aptos_coin::AptosCoin", + "is_frozen": null, + "amount": "2100", + "type_": "0x1::aptos_coin::GasFeeEvent", + "is_gas_fee": true, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06::managed_liquidity_auction::claim_mkl_reward", + "block_height": 256094969, + "token_standard": "v1", + "transaction_timestamp": "2024-11-23T22:32:30", + "storage_refund_amount": "0" + }, + { + "transaction_version": 1957950162, + "event_index": 0, + "owner_address": "0x7ae7cc51c4fab67181a969f53a5d01a292dad0baf259c92c4e1a13f056768e1c", + "storage_id": "0xa1ddab83c8209aabffc66264730ba95bcc7d7a7966192c00d800ab734729622c", + "asset_type": "0x878370592f9129e14b76558689a4b570ad22678111df775befbfcbc9fb3d90ab", + "is_frozen": null, + "amount": "3643926", + "type_": "0x1::fungible_asset::Withdraw", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06::managed_liquidity_auction::claim_mkl_reward", + "block_height": 256094969, + "token_standard": "v2", + "transaction_timestamp": "2024-11-23T22:32:30", + "storage_refund_amount": "0" + }, + { + "transaction_version": 1957950162, + "event_index": 1, + "owner_address": "0x345ced5d7c67360d61a1d59d8cd83cb53095a81aa24a337027391b1c7dd1786f", + "storage_id": "0xd29b17433643769f27d89851553ec2ab5e4204b66eceecb6eec774668117c3e0", + "asset_type": "0x878370592f9129e14b76558689a4b570ad22678111df775befbfcbc9fb3d90ab", + "is_frozen": null, + "amount": "3643926", + "type_": "0x1::fungible_asset::Deposit", + "is_gas_fee": false, + "gas_fee_payer_address": null, + "is_transaction_success": true, + "entry_function_id_str": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06::managed_liquidity_auction::claim_mkl_reward", + "block_height": 256094969, + "token_standard": "v2", + "transaction_timestamp": "2024-11-23T22:32:30", + "storage_refund_amount": "0" + } +] \ No newline at end of file diff --git a/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/fungible_asset_balances.json b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/fungible_asset_balances.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/fungible_asset_balances.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/fungible_asset_metadata.json b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/fungible_asset_metadata.json new file mode 100644 index 000000000..9f8c23199 --- /dev/null +++ b/rust/integration-tests/sdk_expected_db_output_files/fungible_asset_processor/fa_migration_2_batch/fungible_asset_metadata.json @@ -0,0 +1,36 @@ +[ + { + "asset_type": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06::mkl_token::MKL", + "creator_address": "0x5ae6789dd2fec1a9ec9cccfb3acaf12e93d432f0a3a42c92fe1a9d490b7bbc06", + "name": "MKL", + "symbol": "MKL", + "decimals": 6, + "icon_uri": null, + "project_uri": null, + "last_transaction_version": 1680592683, + "last_transaction_timestamp": "2024-09-05T11:52:16", + "supply_aggregator_table_handle_v1": null, + "supply_aggregator_table_key_v1": null, + "token_standard": "v1", + "maximum_v2": null, + "is_token_v2": null, + "supply_v2": null + }, + { + "asset_type": "0x878370592f9129e14b76558689a4b570ad22678111df775befbfcbc9fb3d90ab", + "creator_address": "0x000000000000000000000000000000000000000000000000000000000000000a", + "name": "MKL", + "symbol": "MKL", + "decimals": 6, + "icon_uri": "", + "project_uri": "", + "last_transaction_version": 1957950162, + "last_transaction_timestamp": "2024-11-23T22:32:30", + "supply_aggregator_table_handle_v1": null, + "supply_aggregator_table_key_v1": null, + "token_standard": "v2", + "maximum_v2": "340282366920938463463374607431768211455", + "is_token_v2": null, + "supply_v2": "96895109643615" + } +] \ No newline at end of file diff --git a/rust/integration-tests/src/diff_test_helper/fungible_asset_processor.rs b/rust/integration-tests/src/diff_test_helper/fungible_asset_processor.rs index d9aa16575..94cd7cf13 100644 --- a/rust/integration-tests/src/diff_test_helper/fungible_asset_processor.rs +++ b/rust/integration-tests/src/diff_test_helper/fungible_asset_processor.rs @@ -3,11 +3,7 @@ use crate::models::fa_v2_models::{ FungibleAssetMetadataModel, }; use anyhow::Result; -use diesel::{ - pg::PgConnection, - query_dsl::methods::{FilterDsl, ThenOrderDsl}, - ExpressionMethods, RunQueryDsl, -}; +use diesel::{pg::PgConnection, ExpressionMethods, QueryDsl, RunQueryDsl}; use processor::schema::{ coin_supply::dsl as cs_dsl, current_fungible_asset_balances::dsl as cfab_dsl, fungible_asset_activities::dsl as faa_dsl, fungible_asset_balances::dsl as fab_dsl, @@ -19,14 +15,15 @@ use std::collections::HashMap; #[allow(dead_code)] pub fn load_data( conn: &mut PgConnection, - txn_versions: Vec, + _txn_versions: Vec, // TODO: Remove this after updating testing framework, for now it's just a placeholder to make the function signature match the original ) -> Result> { let mut result_map: HashMap = HashMap::new(); let fungible_asset_activities_result = faa_dsl::fungible_asset_activities - .filter(faa_dsl::transaction_version.eq_any(&txn_versions)) - .then_order_by(faa_dsl::transaction_version.asc()) - .then_order_by(faa_dsl::event_index.asc()) + .order_by(( + faa_dsl::transaction_version.asc(), + faa_dsl::event_index.asc(), + )) .load::(conn); let all_fungible_asset_activities = fungible_asset_activities_result?; let fungible_asset_activities_json = @@ -37,8 +34,7 @@ pub fn load_data( ); let fungible_asset_metadata_result = fam_dsl::fungible_asset_metadata - .filter(fam_dsl::last_transaction_version.eq_any(&txn_versions)) - .then_order_by(fam_dsl::last_transaction_version.asc()) + .order_by(fam_dsl::last_transaction_version.asc()) .load::(conn); let all_fungible_asset_metadata = fungible_asset_metadata_result?; let fungible_asset_metadata_json = serde_json::to_string_pretty(&all_fungible_asset_metadata)?; @@ -48,9 +44,10 @@ pub fn load_data( ); let fungible_asset_balances_result = fab_dsl::fungible_asset_balances - .filter(fab_dsl::transaction_version.eq_any(&txn_versions)) - .then_order_by(fab_dsl::transaction_version.asc()) - .then_order_by(fab_dsl::write_set_change_index.asc()) + .order_by(( + fab_dsl::transaction_version.asc(), + fab_dsl::write_set_change_index.asc(), + )) .load::(conn); let all_fungible_asset_balances = fungible_asset_balances_result?; let fungible_asset_balances_json = serde_json::to_string_pretty(&all_fungible_asset_balances)?; @@ -60,8 +57,10 @@ pub fn load_data( ); let current_fungible_asset_balances_result = cfab_dsl::current_fungible_asset_balances - .filter(cfab_dsl::last_transaction_version.eq_any(&txn_versions)) - .then_order_by(cfab_dsl::storage_id.asc()) + .order_by(( + cfab_dsl::storage_id.asc(), + cfab_dsl::last_transaction_version.asc(), + )) .load::(conn); let all_current_fungible_asset_balances = current_fungible_asset_balances_result?; let current_fungible_asset_balances_json = @@ -72,8 +71,7 @@ pub fn load_data( ); let coin_supply_result = cs_dsl::coin_supply - .filter(cs_dsl::transaction_version.eq_any(&txn_versions)) - .then_order_by(cs_dsl::transaction_version.asc()) + .order_by(cs_dsl::transaction_version.asc()) .load::(conn); let all_coin_supply = coin_supply_result?; let coin_supply_json = serde_json::to_string_pretty(&all_coin_supply)?; diff --git a/rust/integration-tests/src/sdk_tests/fungible_asset_processor_tests.rs b/rust/integration-tests/src/sdk_tests/fungible_asset_processor_tests.rs index 9ee3e1ee0..f2e69f1b4 100644 --- a/rust/integration-tests/src/sdk_tests/fungible_asset_processor_tests.rs +++ b/rust/integration-tests/src/sdk_tests/fungible_asset_processor_tests.rs @@ -45,7 +45,7 @@ mod sdk_fungible_asset_processor_tests { diff_test_helper::fungible_asset_processor::load_data, sdk_tests::{ fungible_asset_processor_tests::setup_fa_processor_config, run_processor_test, - setup_test_environment, validate_json, DEFAULT_OUTPUT_FOLDER, + validate_json, DEFAULT_OUTPUT_FOLDER, }, }; use aptos_indexer_test_transactions::json_transactions::generated_transactions::{ @@ -54,6 +54,8 @@ mod sdk_fungible_asset_processor_tests { IMPORTED_MAINNET_TXNS_1737056775_COIN_TRANSFER_BURN_EVENT, IMPORTED_MAINNET_TXNS_1957950162_FA_MIGRATION_V2_STORE_ONLY, IMPORTED_MAINNET_TXNS_2186504987_COIN_STORE_DELETION_NO_EVENT, + IMPORTED_MAINNET_TXNS_2308282694_ASSET_TYPE_V1_NULL, + IMPORTED_MAINNET_TXNS_2308283617_ASSET_TYPE_V1_NULL_2, IMPORTED_MAINNET_TXNS_255894550_STORAGE_REFUND, IMPORTED_MAINNET_TXNS_508365567_FA_V1_EVENTS, IMPORTED_MAINNET_TXNS_550582915_MULTIPLE_TRANSFER_EVENT, @@ -65,13 +67,17 @@ mod sdk_fungible_asset_processor_tests { IMPORTED_TESTNET_TXNS_5979639459_COIN_REGISTER, IMPORTED_TESTNET_TXNS_5992795934_FA_ACTIVITIES, IMPORTED_TESTNET_TXNS_646928741_NO_EVENTS, }; - use aptos_indexer_testing_framework::{cli_parser::get_test_config, database::TestDatabase}; + use aptos_indexer_testing_framework::{ + cli_parser::get_test_config, + database::{PostgresTestDatabase, TestDatabase}, + sdk_test_context::SdkTestContext, + }; use sdk_processor::processors::fungible_asset_processor::FungibleAssetProcessor; // Test case for processing a specific testnet transaction (Validator Transaction) #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_validator_txn() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_TESTNET_TXNS_5523474016_VALIDATOR_TXN], Some("validator_txn_test".to_string()), ) @@ -81,7 +87,7 @@ mod sdk_fungible_asset_processor_tests { // Test case for processing another testnet transaction (Coin Register) #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_coin_register_txn() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_TESTNET_TXNS_5979639459_COIN_REGISTER], Some("coin_register_txn_test".to_string()), ) @@ -90,7 +96,7 @@ mod sdk_fungible_asset_processor_tests { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_fa_activities_txn() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_TESTNET_TXNS_5992795934_FA_ACTIVITIES], Some("fa_activities_txn_test".to_string()), ) @@ -112,7 +118,7 @@ mod sdk_fungible_asset_processor_tests { */ #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_coin_and_fa_transfers() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_MAINNET_TXNS_999929475_COIN_AND_FA_TRANSFERS], Some("coin_and_fa_transfers_test".to_string()), ) @@ -128,7 +134,7 @@ mod sdk_fungible_asset_processor_tests { */ #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_v1_events() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_MAINNET_TXNS_508365567_FA_V1_EVENTS], Some("v1_events_test".to_string()), ) @@ -142,7 +148,7 @@ mod sdk_fungible_asset_processor_tests { */ #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_v2_frozen_event() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_TESTNET_TXNS_1200394037_FA_V2_FROZEN_EVENT], Some("v2_frozen_event_test".to_string()), ) @@ -157,7 +163,7 @@ mod sdk_fungible_asset_processor_tests { */ #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_concurrent_fa() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_TESTNET_TXNS_2646510387_CONCURRENT_FA], Some("concurrent_fa_test".to_string()), ) @@ -168,7 +174,7 @@ mod sdk_fungible_asset_processor_tests { /// Validates the handling of updated coin event formats #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_coin_v2_events() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_DEVNET_TXNS_78753811_COIN_TRANSFER_WITH_V2_EVENTS], Some("coin_v2_events".to_string()), ) @@ -177,7 +183,7 @@ mod sdk_fungible_asset_processor_tests { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_coin_store_deletion_no_event() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_MAINNET_TXNS_2186504987_COIN_STORE_DELETION_NO_EVENT], Some("coin_store_deletion_no_event".to_string()), ) @@ -188,7 +194,7 @@ mod sdk_fungible_asset_processor_tests { /// Validates correct handling of burning tokens from secondary stores #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_secondary_store_burnt() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_TESTNET_TXNS_4462417704_SECONDARY_STORE_BURNT], Some("secondary_store_burnt".to_string()), ) @@ -199,7 +205,7 @@ mod sdk_fungible_asset_processor_tests { /// Validates correct handling of isolated gas events #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_gas_event_when_events_is_empty() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_TESTNET_TXNS_646928741_NO_EVENTS], Some("gas_event_when_events_is_empty".to_string()), ) @@ -210,7 +216,7 @@ mod sdk_fungible_asset_processor_tests { /// Validates handling of burn operations during coin transfers #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_coin_transfer_burn_event() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_MAINNET_TXNS_1737056775_COIN_TRANSFER_BURN_EVENT], Some("coin_transfer_burn_event".to_string()), ) @@ -221,7 +227,7 @@ mod sdk_fungible_asset_processor_tests { /// Validates correct handling of batch transfers #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_multiple_transfer_event() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_MAINNET_TXNS_550582915_MULTIPLE_TRANSFER_EVENT], Some("multiple_transfer_event".to_string()), ) @@ -232,7 +238,7 @@ mod sdk_fungible_asset_processor_tests { /// Validates correct handling of storage refund mechanics #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_storage_refund() { - process_fa_txns( + process_single_batch_txns( &[IMPORTED_MAINNET_TXNS_255894550_STORAGE_REFUND], Some("storage_refund".to_string()), ) @@ -244,7 +250,7 @@ mod sdk_fungible_asset_processor_tests { /// processes an FA version of that coin #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_fungible_asset_processor_fa_migration_same_batch() { - process_fa_txns( + process_single_batch_txns( &[ IMPORTED_MAINNET_TXNS_1680592683_FA_MIGRATION_COIN_INFO, IMPORTED_MAINNET_TXNS_1957950162_FA_MIGRATION_V2_STORE_ONLY, @@ -255,27 +261,67 @@ mod sdk_fungible_asset_processor_tests { } // TODO: I really want to make this work but it doesn't right now - // #[tokio::test(flavor = "multi_thread", worker_threads = 2)] - // async fn test_fungible_asset_processor_fa_migration_different_batch() { - // process_fa_txns( - // &[IMPORTED_MAINNET_TXNS_1680592683_FA_MIGRATION_COIN_INFO], - // Some("fa_migration_2_batch".to_string()), - // ) - // .await; - - // process_fa_txns( - // &[IMPORTED_MAINNET_TXNS_1957950162_FA_MIGRATION_V2_STORE_ONLY], - // Some("fa_migration_2_batch".to_string()), - // ) - // .await; - // } - - // Helper function to abstract out the transaction processing - async fn process_fa_txns(txns: &[&[u8]], test_case_name: Option) { - let (diff_flag, custom_output_path) = get_test_config(); + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_fungible_asset_processor_fa_migration_different_batch() { + sequential_multi_transaction_helper_function( + &[ + &[IMPORTED_MAINNET_TXNS_1680592683_FA_MIGRATION_COIN_INFO], + &[IMPORTED_MAINNET_TXNS_1957950162_FA_MIGRATION_V2_STORE_ONLY], + ], + "fa_migration_2_batch", + ) + .await; + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_fungible_asset_processor_asset_type_null() { + sequential_multi_transaction_helper_function( + &[&[IMPORTED_MAINNET_TXNS_2308282694_ASSET_TYPE_V1_NULL], &[ + IMPORTED_MAINNET_TXNS_2308283617_ASSET_TYPE_V1_NULL_2, + ]], + "asset_type_null", + ) + .await; + } + + /// Tests processing of two transactions sequentially + /// Validates handling of multiple transactions with shared context + async fn sequential_multi_transaction_helper_function( + txn_batches: &[&[&[u8]]], + output_name: &str, + ) { + let (generate_flag, custom_output_path) = get_test_config(); let output_path = custom_output_path.unwrap_or_else(|| DEFAULT_OUTPUT_FOLDER.to_string()); - let (db, mut test_context) = setup_test_environment(txns).await; + let mut db = PostgresTestDatabase::new(); + db.setup().await.unwrap(); + + for (i, txn_batch) in txn_batches.iter().enumerate() { + let is_last = i == txn_batches.len() - 1; + process_transactions( + &mut db, + txn_batch, + output_name, + is_last && generate_flag, + &output_path, + is_last, + ) + .await; + } + } + + async fn process_transactions( + db: &mut PostgresTestDatabase, + txns: &[&[u8]], + transaction_name: &str, + generate_flag: bool, + output_path: &str, + should_validate: bool, + ) { + let mut test_context = SdkTestContext::new(txns); + if test_context.init_mock_grpc().await.is_err() { + panic!("Failed to initialize mock grpc"); + }; let db_url = db.get_db_url(); let (indexer_processor_config, processor_name) = @@ -290,28 +336,48 @@ mod sdk_fungible_asset_processor_tests { fungible_asset_processor, load_data, db_url, - diff_flag, - output_path.clone(), - test_case_name.clone(), + generate_flag, + output_path.to_string(), + Some(transaction_name.to_string()), ) .await { Ok(mut db_value) => { - let _ = validate_json( - &mut db_value, - test_context.get_request_start_version(), - processor_name, - output_path.clone(), - test_case_name, - ); + if should_validate { + let _ = validate_json( + &mut db_value, + test_context.get_request_start_version(), + processor_name, + output_path.to_string(), + Some(transaction_name.to_string()), + ); + } }, Err(e) => { panic!( - "Test failed on transactions {:?} due to processor error: {}", - test_context.get_test_transaction_versions(), - e + "Test failed on {} due to processor error: {}", + transaction_name, e ); }, } } + + // Update the existing process_single_batch_txns function to use the new merged function + async fn process_single_batch_txns(txns: &[&[u8]], test_case_name: Option) { + let (generate_flag, custom_output_path) = get_test_config(); + let output_path = custom_output_path.unwrap_or_else(|| DEFAULT_OUTPUT_FOLDER.to_string()); + + let mut db = PostgresTestDatabase::new(); + db.setup().await.unwrap(); + + process_transactions( + &mut db, + txns, + &test_case_name.unwrap_or_default(), + generate_flag, + &output_path, + true, // Assuming we want to validate for fungible asset transactions + ) + .await; + } }