From ab39dee1e44bb113d26669e31ab90b6564a10ae8 Mon Sep 17 00:00:00 2001 From: musitdev Date: Wed, 22 Apr 2026 18:40:46 +0200 Subject: [PATCH 1/3] Confidential asset processor initial version --- .../public_key_auth_keys.json | 8 +- .../public_key_auth_keys.json | 8 +- .../public_key_auth_keys.json | 8 +- .../public_key_auth_keys.json | 16 +- .../current_ans_lookup_v2.json | 14 +- .../current_ans_primary_name_v2.json | 9 - .../current_ans_lookup_v2.json | 14 +- .../current_ans_primary_name_v2.json | 12 +- .../current_ans_lookup_v2.json | 14 +- .../current_ans_primary_name_v2.json | 12 +- .../current_ans_lookup_v2.json | 12 +- .../confidential_asset_activities.json | 25 ++ .../confidential_asset_activities.json | 56 +++ .../confidential_asset_processor.rs | 21 + integration-tests/src/diff_test_helper/mod.rs | 1 + .../src/models/confidential_asset_models.rs | 23 ++ integration-tests/src/models/mod.rs | 1 + .../confidential_asset_processor_tests.rs | 206 ++++++++++ integration-tests/src/sdk_tests/mod.rs | 2 + .../confidential_asset/1001_ca_register.json | 63 +++ .../confidential_asset/1002_ca_deposit.json | 63 +++ .../confidential_asset/1003_ca_withdraw.json | 63 +++ .../confidential_asset/1004_ca_transfer.json | 63 +++ .../confidential_asset/1005_ca_rollover.json | 63 +++ .../confidential_asset/1006_ca_normalize.json | 63 +++ .../src/config/indexer_processor_config.rs | 5 + processor/src/config/processor_config.rs | 1 + .../down.sql | 1 + .../up.sql | 33 ++ processor/src/db/schema.rs | 22 ++ .../confidential_asset_extractor.rs | 53 +++ .../confidential_asset_processor.rs | 145 +++++++ .../confidential_asset_storer.rs | 116 ++++++ .../src/processors/confidential_asset/mod.rs | 4 + .../models/confidential_asset_events.rs | 366 ++++++++++++++++++ .../confidential_asset/models/mod.rs | 1 + processor/src/processors/mod.rs | 1 + 37 files changed, 1492 insertions(+), 96 deletions(-) create mode 100644 integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_register/confidential_asset_activities.json create mode 100644 integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_rollover/confidential_asset_activities.json create mode 100644 integration-tests/src/diff_test_helper/confidential_asset_processor.rs create mode 100644 integration-tests/src/models/confidential_asset_models.rs create mode 100644 integration-tests/src/sdk_tests/confidential_asset_processor_tests.rs create mode 100644 integration-tests/src/sdk_tests/test_transactions/confidential_asset/1001_ca_register.json create mode 100644 integration-tests/src/sdk_tests/test_transactions/confidential_asset/1002_ca_deposit.json create mode 100644 integration-tests/src/sdk_tests/test_transactions/confidential_asset/1003_ca_withdraw.json create mode 100644 integration-tests/src/sdk_tests/test_transactions/confidential_asset/1004_ca_transfer.json create mode 100644 integration-tests/src/sdk_tests/test_transactions/confidential_asset/1005_ca_rollover.json create mode 100644 integration-tests/src/sdk_tests/test_transactions/confidential_asset/1006_ca_normalize.json create mode 100644 processor/src/db/migrations/2026-04-15-000000_confidential_asset/down.sql create mode 100644 processor/src/db/migrations/2026-04-15-000000_confidential_asset/up.sql create mode 100644 processor/src/processors/confidential_asset/confidential_asset_extractor.rs create mode 100644 processor/src/processors/confidential_asset/confidential_asset_processor.rs create mode 100644 processor/src/processors/confidential_asset/confidential_asset_storer.rs create mode 100644 processor/src/processors/confidential_asset/mod.rs create mode 100644 processor/src/processors/confidential_asset/models/confidential_asset_events.rs create mode 100644 processor/src/processors/confidential_asset/models/mod.rs diff --git a/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_duplicated_keyless_multikey_txn/public_key_auth_keys.json b/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_duplicated_keyless_multikey_txn/public_key_auth_keys.json index 1e83cf0f..aa622e6a 100644 --- a/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_duplicated_keyless_multikey_txn/public_key_auth_keys.json +++ b/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_duplicated_keyless_multikey_txn/public_key_auth_keys.json @@ -3,18 +3,18 @@ "public_key": "0x1b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20b9dc1631aea98040b789607a16f2f761e0eba2a78f7397a3e7eb88f011f3f224", "public_key_type": "keyless", "auth_key": "0xd0c1f0976df2d936abc47b4a848f48292dc2b133f8aa82f0bcff495716f9fb2d", - "account_public_key": "0x03031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20b9dc1631aea98040b789607a16f2f761e0eba2a78f7397a3e7eb88f011f3f224031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20b9dc1631aea98040b789607a16f2f761e0eba2a78f7397a3e7eb88f011f3f22400202e48da67baa5a7f18f2f001b77ff852c6d098977ca21608996c1b2c84287c83101", "is_public_key_used": true, "last_transaction_version": 57156484, - "signature_type": "multi_key_signature" + "signature_type": "multi_key_signature", + "account_public_key": "0x03031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20b9dc1631aea98040b789607a16f2f761e0eba2a78f7397a3e7eb88f011f3f224031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20b9dc1631aea98040b789607a16f2f761e0eba2a78f7397a3e7eb88f011f3f22400202e48da67baa5a7f18f2f001b77ff852c6d098977ca21608996c1b2c84287c83101" }, { "public_key": "0x2e48da67baa5a7f18f2f001b77ff852c6d098977ca21608996c1b2c84287c831", "public_key_type": "ed25519", "auth_key": "0xd0c1f0976df2d936abc47b4a848f48292dc2b133f8aa82f0bcff495716f9fb2d", - "account_public_key": "0x03031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20b9dc1631aea98040b789607a16f2f761e0eba2a78f7397a3e7eb88f011f3f224031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20b9dc1631aea98040b789607a16f2f761e0eba2a78f7397a3e7eb88f011f3f22400202e48da67baa5a7f18f2f001b77ff852c6d098977ca21608996c1b2c84287c83101", "is_public_key_used": false, "last_transaction_version": 57156484, - "signature_type": "multi_key_signature" + "signature_type": "multi_key_signature", + "account_public_key": "0x03031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20b9dc1631aea98040b789607a16f2f761e0eba2a78f7397a3e7eb88f011f3f224031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20b9dc1631aea98040b789607a16f2f761e0eba2a78f7397a3e7eb88f011f3f22400202e48da67baa5a7f18f2f001b77ff852c6d098977ca21608996c1b2c84287c83101" } ] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_1/public_key_auth_keys.json b/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_1/public_key_auth_keys.json index 6dc3caf4..2fc24cd1 100644 --- a/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_1/public_key_auth_keys.json +++ b/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_1/public_key_auth_keys.json @@ -3,18 +3,18 @@ "public_key": "0x1b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26", "public_key_type": "keyless", "auth_key": "0x8fd0cc31f86b1a8ffd3892b7089054f98e3f4b9047e3f29826018a393226438b", - "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01", "is_public_key_used": true, "last_transaction_version": 119309306, - "signature_type": "multi_key_signature" + "signature_type": "multi_key_signature", + "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01" }, { "public_key": "0x98fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a", "public_key_type": "ed25519", "auth_key": "0x8fd0cc31f86b1a8ffd3892b7089054f98e3f4b9047e3f29826018a393226438b", - "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01", "is_public_key_used": true, "last_transaction_version": 119309306, - "signature_type": "multi_key_signature" + "signature_type": "multi_key_signature", + "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01" } ] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_2/public_key_auth_keys.json b/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_2/public_key_auth_keys.json index 85748363..3711c059 100644 --- a/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_2/public_key_auth_keys.json +++ b/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_2/public_key_auth_keys.json @@ -3,18 +3,18 @@ "public_key": "0x1b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26", "public_key_type": "keyless", "auth_key": "0x8fd0cc31f86b1a8ffd3892b7089054f98e3f4b9047e3f29826018a393226438b", - "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01", "is_public_key_used": true, "last_transaction_version": 119309341, - "signature_type": "multi_key_signature" + "signature_type": "multi_key_signature", + "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01" }, { "public_key": "0x98fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a", "public_key_type": "ed25519", "auth_key": "0x8fd0cc31f86b1a8ffd3892b7089054f98e3f4b9047e3f29826018a393226438b", - "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01", "is_public_key_used": true, "last_transaction_version": 119309341, - "signature_type": "multi_key_signature" + "signature_type": "multi_key_signature", + "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01" } ] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_3/public_key_auth_keys.json b/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_3/public_key_auth_keys.json index f2c876b4..652559da 100644 --- a/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_3/public_key_auth_keys.json +++ b/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_keyless_backup_state_3/public_key_auth_keys.json @@ -3,36 +3,36 @@ "public_key": "0x1b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26", "public_key_type": "keyless", "auth_key": "0x8fd0cc31f86b1a8ffd3892b7089054f98e3f4b9047e3f29826018a393226438b", - "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01", "is_public_key_used": true, "last_transaction_version": 119309341, - "signature_type": "multi_key_signature" + "signature_type": "multi_key_signature", + "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01" }, { "public_key": "0x98fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a", "public_key_type": "ed25519", "auth_key": "0x8fd0cc31f86b1a8ffd3892b7089054f98e3f4b9047e3f29826018a393226438b", - "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01", "is_public_key_used": true, "last_transaction_version": 119309341, - "signature_type": "multi_key_signature" + "signature_type": "multi_key_signature", + "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002098fcc9ea24ef262f55c7359a4814676d8198ae452e30fe8f699d25b613469f9a01" }, { "public_key": "0x1b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26", "public_key_type": "keyless", "auth_key": "0xbf8441ac4824b3e7b11aae4588ff0aae608051195370c5946aeaf64f273ea39d", - "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002091837e4ec1f7bfa130666871e74e18e91498010a2e1265fd015f9fa2d4ca348201", "is_public_key_used": true, "last_transaction_version": 122009973, - "signature_type": "multi_key_signature" + "signature_type": "multi_key_signature", + "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002091837e4ec1f7bfa130666871e74e18e91498010a2e1265fd015f9fa2d4ca348201" }, { "public_key": "0x91837e4ec1f7bfa130666871e74e18e91498010a2e1265fd015f9fa2d4ca3482", "public_key_type": "ed25519", "auth_key": "0xbf8441ac4824b3e7b11aae4588ff0aae608051195370c5946aeaf64f273ea39d", - "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002091837e4ec1f7bfa130666871e74e18e91498010a2e1265fd015f9fa2d4ca348201", "is_public_key_used": true, "last_transaction_version": 122009973, - "signature_type": "multi_key_signature" + "signature_type": "multi_key_signature", + "account_public_key": "0x02031b68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d20df280a94dd75e9e243f99287dc58768713a1aa7ed79f5a55b549bfafb606aa26002091837e4ec1f7bfa130666871e74e18e91498010a2e1265fd015f9fa2d4ca348201" } ] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/ans_processor/test_ans_lookup_v2/current_ans_lookup_v2.json b/integration-tests/sdk_expected_db_output_files/ans_processor/test_ans_lookup_v2/current_ans_lookup_v2.json index a80e41de..0637a088 100644 --- a/integration-tests/sdk_expected_db_output_files/ans_processor/test_ans_lookup_v2/current_ans_lookup_v2.json +++ b/integration-tests/sdk_expected_db_output_files/ans_processor/test_ans_lookup_v2/current_ans_lookup_v2.json @@ -1,13 +1 @@ -[ - { - "domain": "pepapati", - "subdomain": "", - "token_standard": "v2", - "token_name": "pepapati.apt", - "registered_address": "0xb879a253da5c2887155600f61a5a3b7b827588f7b3c486b807975fc663ca5493", - "expiration_timestamp": "2024-08-10T16:57:36", - "last_transaction_version": 303690531, - "is_deleted": false, - "subdomain_expiration_policy": null - } -] \ No newline at end of file +[] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/ans_processor/test_ans_lookup_v2/current_ans_primary_name_v2.json b/integration-tests/sdk_expected_db_output_files/ans_processor/test_ans_lookup_v2/current_ans_primary_name_v2.json index 23cf389e..ac6ec940 100644 --- a/integration-tests/sdk_expected_db_output_files/ans_processor/test_ans_lookup_v2/current_ans_primary_name_v2.json +++ b/integration-tests/sdk_expected_db_output_files/ans_processor/test_ans_lookup_v2/current_ans_primary_name_v2.json @@ -7,14 +7,5 @@ "token_name": null, "is_deleted": true, "last_transaction_version": 303690531 - }, - { - "registered_address": "0xb879a253da5c2887155600f61a5a3b7b827588f7b3c486b807975fc663ca5493", - "token_standard": "v2", - "domain": "pepapati", - "subdomain": "", - "token_name": "pepapati.apt", - "is_deleted": false, - "last_transaction_version": 303690531 } ] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_lookup_v2/current_ans_lookup_v2.json b/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_lookup_v2/current_ans_lookup_v2.json index 92ae8ee9..0637a088 100644 --- a/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_lookup_v2/current_ans_lookup_v2.json +++ b/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_lookup_v2/current_ans_lookup_v2.json @@ -1,13 +1 @@ -[ - { - "domain": "003", - "subdomain": "", - "token_standard": "v2", - "token_name": "003.apt", - "registered_address": "0x761e4e45d8c6d56fb9fab4ebd865ce4a3dfe3a7bea3956158b4be07f268bcff5", - "expiration_timestamp": "2024-11-19T13:31:40", - "last_transaction_version": 438536688, - "is_deleted": false, - "subdomain_expiration_policy": null - } -] \ No newline at end of file +[] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_lookup_v2/current_ans_primary_name_v2.json b/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_lookup_v2/current_ans_primary_name_v2.json index d6ef727b..0637a088 100644 --- a/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_lookup_v2/current_ans_primary_name_v2.json +++ b/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_lookup_v2/current_ans_primary_name_v2.json @@ -1,11 +1 @@ -[ - { - "registered_address": "0x761e4e45d8c6d56fb9fab4ebd865ce4a3dfe3a7bea3956158b4be07f268bcff5", - "token_standard": "v2", - "domain": "003", - "subdomain": "", - "token_name": "003.apt", - "is_deleted": false, - "last_transaction_version": 438536688 - } -] \ No newline at end of file +[] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_primary_name_v2/current_ans_lookup_v2.json b/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_primary_name_v2/current_ans_lookup_v2.json index aee51ced..0637a088 100644 --- a/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_primary_name_v2/current_ans_lookup_v2.json +++ b/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_primary_name_v2/current_ans_lookup_v2.json @@ -1,13 +1 @@ -[ - { - "domain": "petra", - "subdomain": "abwehr1225", - "token_standard": "v2", - "token_name": "abwehr1225.petra.apt", - "registered_address": "0x18a88b9722c7af62308e79b713710876156c68c3e3fdbd408294af6b16dc046a", - "expiration_timestamp": "2024-07-29T17:32:30", - "last_transaction_version": 1056780409, - "is_deleted": false, - "subdomain_expiration_policy": 1 - } -] \ No newline at end of file +[] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_primary_name_v2/current_ans_primary_name_v2.json b/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_primary_name_v2/current_ans_primary_name_v2.json index 9acd56c3..0637a088 100644 --- a/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_primary_name_v2/current_ans_primary_name_v2.json +++ b/integration-tests/sdk_expected_db_output_files/ans_processor/test_current_ans_primary_name_v2/current_ans_primary_name_v2.json @@ -1,11 +1 @@ -[ - { - "registered_address": "0x18a88b9722c7af62308e79b713710876156c68c3e3fdbd408294af6b16dc046a", - "token_standard": "v2", - "domain": "petra", - "subdomain": "abwehr1225", - "token_name": "abwehr1225.petra.apt", - "is_deleted": false, - "last_transaction_version": 1056780409 - } -] \ No newline at end of file +[] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/ans_processor/test_mainnet_ans_lookup_v1/current_ans_lookup_v2.json b/integration-tests/sdk_expected_db_output_files/ans_processor/test_mainnet_ans_lookup_v1/current_ans_lookup_v2.json index cbd563c0..0992b6d5 100644 --- a/integration-tests/sdk_expected_db_output_files/ans_processor/test_mainnet_ans_lookup_v1/current_ans_lookup_v2.json +++ b/integration-tests/sdk_expected_db_output_files/ans_processor/test_mainnet_ans_lookup_v1/current_ans_lookup_v2.json @@ -3,7 +3,7 @@ "domain": "asha", "subdomain": "", "token_standard": "v1", - "token_name": "asha.apt", + "token_name": "asha.move", "registered_address": null, "expiration_timestamp": "2023-10-18T16:54:32", "last_transaction_version": 2080538, @@ -14,7 +14,7 @@ "domain": "chris", "subdomain": "", "token_standard": "v1", - "token_name": "chris.apt", + "token_name": "chris.move", "registered_address": null, "expiration_timestamp": "2023-10-18T16:54:32", "last_transaction_version": 2080538, @@ -25,7 +25,7 @@ "domain": "david", "subdomain": "", "token_standard": "v1", - "token_name": "david.apt", + "token_name": "david.move", "registered_address": null, "expiration_timestamp": "2023-10-18T16:54:32", "last_transaction_version": 2080538, @@ -36,7 +36,7 @@ "domain": "god", "subdomain": "", "token_standard": "v1", - "token_name": "god.apt", + "token_name": "god.move", "registered_address": null, "expiration_timestamp": "2023-10-18T16:54:32", "last_transaction_version": 2080538, @@ -47,7 +47,7 @@ "domain": "maayan", "subdomain": "", "token_standard": "v1", - "token_name": "maayan.apt", + "token_name": "maayan.move", "registered_address": null, "expiration_timestamp": "2023-10-18T16:54:32", "last_transaction_version": 2080538, @@ -58,7 +58,7 @@ "domain": "max", "subdomain": "", "token_standard": "v1", - "token_name": "max.apt", + "token_name": "max.move", "registered_address": null, "expiration_timestamp": "2023-10-18T16:54:32", "last_transaction_version": 2080538, diff --git a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_register/confidential_asset_activities.json b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_register/confidential_asset_activities.json new file mode 100644 index 00000000..899d2a23 --- /dev/null +++ b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_register/confidential_asset_activities.json @@ -0,0 +1,25 @@ +[ + { + "transaction_version": 1001, + "event_index": 0, + "event_type": "Registered", + "account_address": "0x1111111111111111111111111111111111111111111111111111111111111111", + "asset_type": "0x3333333333333333333333333333333333333333333333333333333333333333", + "from_address": "0x1111111111111111111111111111111111111111111111111111111111111111", + "to_address": null, + "event_data": { + "data": { + "ek": { + "point": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "addr": "0x1111111111111111111111111111111111111111111111111111111111111111", + "asset_type": "0x3333333333333333333333333333333333333333333333333333333333333333" + }, + "type": "Registered" + }, + "block_height": 1001, + "transaction_timestamp": "2023-11-14T22:13:21" + } +] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_rollover/confidential_asset_activities.json b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_rollover/confidential_asset_activities.json new file mode 100644 index 00000000..0790bdc3 --- /dev/null +++ b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_rollover/confidential_asset_activities.json @@ -0,0 +1,56 @@ +[ + { + "transaction_version": 1005, + "event_index": 0, + "event_type": "RolledOver", + "account_address": "0x1111111111111111111111111111111111111111111111111111111111111111", + "asset_type": "0x3333333333333333333333333333333333333333333333333333333333333333", + "from_address": "0x1111111111111111111111111111111111111111111111111111111111111111", + "to_address": null, + "event_data": { + "data": { + "addr": "0x1111111111111111111111111111111111111111111111111111111111111111", + "asset_type": "0x3333333333333333333333333333333333333333333333333333333333333333", + "new_available_balance": { + "chunks": [ + { + "left": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "left": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "left": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "left": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + ] + } + }, + "type": "RolledOver" + }, + "block_height": 1005, + "transaction_timestamp": "2023-11-14T22:13:25" + } +] \ No newline at end of file diff --git a/integration-tests/src/diff_test_helper/confidential_asset_processor.rs b/integration-tests/src/diff_test_helper/confidential_asset_processor.rs new file mode 100644 index 00000000..ad3de2a6 --- /dev/null +++ b/integration-tests/src/diff_test_helper/confidential_asset_processor.rs @@ -0,0 +1,21 @@ +use crate::models::confidential_asset_models::ConfidentialAssetActivity; +use anyhow::Result; +use diesel::{pg::PgConnection, query_dsl::methods::ThenOrderDsl, ExpressionMethods, RunQueryDsl}; +use processor::schema::confidential_asset_activities::dsl::*; +use serde_json::Value; +use std::collections::HashMap; + +pub fn load_data(conn: &mut PgConnection) -> Result> { + let rows = confidential_asset_activities + .then_order_by(transaction_version.asc()) + .then_order_by(event_index.asc()) + .load::(conn)?; + + let json = serde_json::to_string_pretty(&rows)?; + let mut result = HashMap::new(); + result.insert( + "confidential_asset_activities".to_string(), + serde_json::from_str(&json)?, + ); + Ok(result) +} diff --git a/integration-tests/src/diff_test_helper/mod.rs b/integration-tests/src/diff_test_helper/mod.rs index 35dc66ef..495023ea 100644 --- a/integration-tests/src/diff_test_helper/mod.rs +++ b/integration-tests/src/diff_test_helper/mod.rs @@ -1,4 +1,5 @@ pub mod account_restoration_processor; +pub mod confidential_asset_processor; pub mod account_transaction_processor; pub mod ans_processor; pub mod default_processor; diff --git a/integration-tests/src/models/confidential_asset_models.rs b/integration-tests/src/models/confidential_asset_models.rs new file mode 100644 index 00000000..a03c9b60 --- /dev/null +++ b/integration-tests/src/models/confidential_asset_models.rs @@ -0,0 +1,23 @@ +use diesel::{Identifiable, Queryable}; +use processor::schema::confidential_asset_activities; +use serde::{Deserialize, Serialize}; + +/// Queryable mirror of `confidential_asset_activities`. +/// Columns must be listed in the same order as the table definition so that +/// Diesel's `Queryable` derive maps them correctly. +#[derive(Clone, Debug, Deserialize, Identifiable, Queryable, Serialize)] +#[diesel(primary_key(transaction_version, event_index))] +#[diesel(table_name = confidential_asset_activities)] +pub struct ConfidentialAssetActivity { + pub transaction_version: i64, + pub event_index: i64, + pub event_type: String, + pub account_address: String, + pub asset_type: Option, + pub from_address: Option, + pub to_address: Option, + pub event_data: serde_json::Value, + pub block_height: i64, + pub transaction_timestamp: chrono::NaiveDateTime, + pub inserted_at: chrono::NaiveDateTime, +} diff --git a/integration-tests/src/models/mod.rs b/integration-tests/src/models/mod.rs index 59aa3dc4..8d217137 100644 --- a/integration-tests/src/models/mod.rs +++ b/integration-tests/src/models/mod.rs @@ -1,4 +1,5 @@ pub mod account_restoration_models; +pub mod confidential_asset_models; pub mod account_transaction_models; pub mod ans_models; pub mod default_models; diff --git a/integration-tests/src/sdk_tests/confidential_asset_processor_tests.rs b/integration-tests/src/sdk_tests/confidential_asset_processor_tests.rs new file mode 100644 index 00000000..0f417706 --- /dev/null +++ b/integration-tests/src/sdk_tests/confidential_asset_processor_tests.rs @@ -0,0 +1,206 @@ +use ahash::AHashMap; +use aptos_indexer_processor_sdk::testing_framework::sdk_test_context::SdkTestContext; +use processor::config::{ + db_config::{DbConfig, PostgresConfig}, + indexer_processor_config::IndexerProcessorConfig, + processor_config::{DefaultProcessorConfig, ProcessorConfig}, + processor_mode::{ProcessorMode, TestingConfig}, +}; +use std::collections::HashSet; + +// --------------------------------------------------------------------------- +// Pre-recorded synthetic transactions (one per CA event type) +// --------------------------------------------------------------------------- + +pub const CA_TXN_REGISTER: &[u8] = + include_bytes!("test_transactions/confidential_asset/1001_ca_register.json"); +pub const CA_TXN_DEPOSIT: &[u8] = + include_bytes!("test_transactions/confidential_asset/1002_ca_deposit.json"); +pub const CA_TXN_WITHDRAW: &[u8] = + include_bytes!("test_transactions/confidential_asset/1003_ca_withdraw.json"); +pub const CA_TXN_TRANSFER: &[u8] = + include_bytes!("test_transactions/confidential_asset/1004_ca_transfer.json"); +pub const CA_TXN_ROLLOVER: &[u8] = + include_bytes!("test_transactions/confidential_asset/1005_ca_rollover.json"); +pub const CA_TXN_NORMALIZE: &[u8] = + include_bytes!("test_transactions/confidential_asset/1006_ca_normalize.json"); + +// --------------------------------------------------------------------------- +// Processor config helper +// --------------------------------------------------------------------------- + +pub fn setup_ca_processor_config( + test_context: &SdkTestContext, + db_url: &str, +) -> (IndexerProcessorConfig, &'static str) { + let transaction_stream_config = test_context.create_transaction_stream_config(); + let postgres_config = PostgresConfig { + connection_string: db_url.to_string(), + db_pool_size: 100, + }; + let db_config = DbConfig::PostgresConfig(postgres_config); + let default_processor_config = DefaultProcessorConfig { + per_table_chunk_sizes: AHashMap::new(), + channel_size: 100, + tables_to_write: HashSet::new(), + }; + let processor_config = ProcessorConfig::ConfidentialAssetProcessor(default_processor_config); + let processor_name = processor_config.name(); + ( + IndexerProcessorConfig { + processor_config, + transaction_stream_config: transaction_stream_config.clone(), + db_config, + processor_mode: ProcessorMode::Testing(TestingConfig { + override_starting_version: transaction_stream_config.starting_version.unwrap(), + ending_version: transaction_stream_config.request_ending_version, + }), + }, + processor_name, + ) +} + +// --------------------------------------------------------------------------- +// Tests +// --------------------------------------------------------------------------- + +#[allow(clippy::needless_return)] +#[cfg(test)] +mod sdk_confidential_asset_processor_tests { + use super::{ + setup_ca_processor_config, CA_TXN_DEPOSIT, CA_TXN_NORMALIZE, CA_TXN_REGISTER, + CA_TXN_ROLLOVER, CA_TXN_TRANSFER, CA_TXN_WITHDRAW, + }; + use crate::{ + diff_test_helper::confidential_asset_processor::load_data, + sdk_tests::test_helpers::{ + run_processor_test, setup_test_environment, validate_json, DEFAULT_OUTPUT_FOLDER, + }, + }; + use aptos_indexer_processor_sdk::testing_framework::{ + cli_parser::get_test_config, database::TestDatabase, + }; + use processor::processors::confidential_asset::confidential_asset_processor::ConfidentialAssetProcessor; + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_ca_register() { + process_single_ca_txn(CA_TXN_REGISTER, Some("ca_register".to_string())).await; + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_ca_deposit() { + process_single_ca_txn(CA_TXN_DEPOSIT, Some("ca_deposit".to_string())).await; + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_ca_withdraw() { + process_single_ca_txn(CA_TXN_WITHDRAW, Some("ca_withdraw".to_string())).await; + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_ca_transfer() { + process_single_ca_txn(CA_TXN_TRANSFER, Some("ca_transfer".to_string())).await; + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_ca_rollover() { + process_single_ca_txn(CA_TXN_ROLLOVER, Some("ca_rollover".to_string())).await; + } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_ca_normalize() { + process_single_ca_txn(CA_TXN_NORMALIZE, Some("ca_normalize".to_string())).await; + } + + /// Processes all six CA event types in a single batch and validates the + /// combined DB output. + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_ca_all_events() { + let (generate_flag, custom_output_path) = get_test_config(); + let output_path = custom_output_path.unwrap_or_else(|| DEFAULT_OUTPUT_FOLDER.to_string()); + + let txns = [ + CA_TXN_REGISTER, + CA_TXN_DEPOSIT, + CA_TXN_WITHDRAW, + CA_TXN_TRANSFER, + CA_TXN_ROLLOVER, + CA_TXN_NORMALIZE, + ]; + + let (db, mut test_context) = setup_test_environment(&txns).await; + let db_url = db.get_db_url(); + let (config, processor_name) = setup_ca_processor_config(&test_context, &db_url); + + let processor = ConfidentialAssetProcessor::new(config) + .await + .expect("Failed to create ConfidentialAssetProcessor"); + let test_case = Some("ca_all_events".to_string()); + + match run_processor_test( + &mut test_context, + processor, + load_data, + db_url, + generate_flag, + output_path.clone(), + test_case.clone(), + ) + .await + { + Ok(mut db_value) => { + let _ = validate_json( + &mut db_value, + test_context.get_request_start_version(), + processor_name, + output_path, + test_case, + ); + }, + Err(e) => panic!("test_ca_all_events failed: {e}"), + } + } + + // ----------------------------------------------------------------------- + // Helper + // ----------------------------------------------------------------------- + + async fn process_single_ca_txn(txn: &[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 (db, mut test_context) = setup_test_environment(&[txn]).await; + let db_url = db.get_db_url(); + let (config, processor_name) = setup_ca_processor_config(&test_context, &db_url); + + let processor = ConfidentialAssetProcessor::new(config) + .await + .expect("Failed to create ConfidentialAssetProcessor"); + + match run_processor_test( + &mut test_context, + processor, + load_data, + db_url, + generate_flag, + output_path.clone(), + test_case_name.clone(), + ) + .await + { + Ok(mut db_value) => { + let _ = validate_json( + &mut db_value, + test_context.get_request_start_version(), + processor_name, + output_path, + test_case_name, + ); + }, + Err(e) => panic!( + "Test failed for versions {:?}: {e}", + test_context.get_test_transaction_versions() + ), + } + } +} diff --git a/integration-tests/src/sdk_tests/mod.rs b/integration-tests/src/sdk_tests/mod.rs index 2803b6d8..253d1659 100644 --- a/integration-tests/src/sdk_tests/mod.rs +++ b/integration-tests/src/sdk_tests/mod.rs @@ -1,6 +1,8 @@ #[cfg(test)] pub mod account_restoration_processor_tests; #[cfg(test)] +pub mod confidential_asset_processor_tests; +#[cfg(test)] pub mod account_transaction_processor_tests; #[cfg(test)] pub mod ans_processor_tests; diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1001_ca_register.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1001_ca_register.json new file mode 100644 index 00000000..7fa81301 --- /dev/null +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1001_ca_register.json @@ -0,0 +1,63 @@ +{ + "timestamp": { "seconds": "1700000001", "nanos": 0 }, + "version": "1001", + "info": { + "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "gasUsed": "500", + "success": true, + "vmStatus": "Executed successfully", + "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "changes": [] + }, + "epoch": "1", + "blockHeight": "1001", + "type": "TRANSACTION_TYPE_USER", + "sizeInfo": { + "transactionBytes": 100, + "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 150 }], + "writeOpSizeInfo": [] + }, + "user": { + "request": { + "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", + "sequenceNumber": "0", + "maxGasAmount": "100000", + "gasUnitPrice": "100", + "expirationTimestampSecs": { "seconds": "9999999999" }, + "payload": { + "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", + "entryFunctionPayload": { + "function": { + "module": { "address": "0x1", "name": "confidential_asset" }, + "name": "register" + }, + "typeArguments": [], + "arguments": [], + "entryFunctionIdStr": "0x1::confidential_asset::register" + } + }, + "signature": { + "type": "TYPE_ED25519", + "ed25519": { + "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + } + } + }, + "events": [ + { + "key": { + "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { "address": "0x1", "module": "confidential_asset", "name": "Registered" } + }, + "typeStr": "0x1::confidential_asset::Registered", + "data": "{\"addr\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"ek\":{\"point\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}}" + } + ] + } +} diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1002_ca_deposit.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1002_ca_deposit.json new file mode 100644 index 00000000..6f478245 --- /dev/null +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1002_ca_deposit.json @@ -0,0 +1,63 @@ +{ + "timestamp": { "seconds": "1700000002", "nanos": 0 }, + "version": "1002", + "info": { + "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB=", + "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB=", + "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB=", + "gasUsed": "500", + "success": true, + "vmStatus": "Executed successfully", + "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB=", + "changes": [] + }, + "epoch": "1", + "blockHeight": "1002", + "type": "TRANSACTION_TYPE_USER", + "sizeInfo": { + "transactionBytes": 100, + "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 200 }], + "writeOpSizeInfo": [] + }, + "user": { + "request": { + "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", + "sequenceNumber": "1", + "maxGasAmount": "100000", + "gasUnitPrice": "100", + "expirationTimestampSecs": { "seconds": "9999999999" }, + "payload": { + "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", + "entryFunctionPayload": { + "function": { + "module": { "address": "0x1", "name": "confidential_asset" }, + "name": "deposit" + }, + "typeArguments": [], + "arguments": [], + "entryFunctionIdStr": "0x1::confidential_asset::deposit" + } + }, + "signature": { + "type": "TYPE_ED25519", + "ed25519": { + "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + } + } + }, + "events": [ + { + "key": { + "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { "address": "0x1", "module": "confidential_asset", "name": "Deposited" } + }, + "typeStr": "0x1::confidential_asset::Deposited", + "data": "{\"from\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"to\":\"0x2222222222222222222222222222222222222222222222222222222222222222\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"amount\":\"1000\",\"new_pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]}}" + } + ] + } +} diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1003_ca_withdraw.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1003_ca_withdraw.json new file mode 100644 index 00000000..a0d8985c --- /dev/null +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1003_ca_withdraw.json @@ -0,0 +1,63 @@ +{ + "timestamp": { "seconds": "1700000003", "nanos": 0 }, + "version": "1003", + "info": { + "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC=", + "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC=", + "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC=", + "gasUsed": "500", + "success": true, + "vmStatus": "Executed successfully", + "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC=", + "changes": [] + }, + "epoch": "1", + "blockHeight": "1003", + "type": "TRANSACTION_TYPE_USER", + "sizeInfo": { + "transactionBytes": 100, + "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 200 }], + "writeOpSizeInfo": [] + }, + "user": { + "request": { + "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", + "sequenceNumber": "2", + "maxGasAmount": "100000", + "gasUnitPrice": "100", + "expirationTimestampSecs": { "seconds": "9999999999" }, + "payload": { + "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", + "entryFunctionPayload": { + "function": { + "module": { "address": "0x1", "name": "confidential_asset" }, + "name": "withdraw" + }, + "typeArguments": [], + "arguments": [], + "entryFunctionIdStr": "0x1::confidential_asset::withdraw" + } + }, + "signature": { + "type": "TYPE_ED25519", + "ed25519": { + "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + } + } + }, + "events": [ + { + "key": { + "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { "address": "0x1", "module": "confidential_asset", "name": "Withdrawn" } + }, + "typeStr": "0x1::confidential_asset::Withdrawn", + "data": "{\"from\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"to\":\"0x2222222222222222222222222222222222222222222222222222222222222222\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"amount\":\"500\",\"new_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]}}" + } + ] + } +} diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1004_ca_transfer.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1004_ca_transfer.json new file mode 100644 index 00000000..a9e445c1 --- /dev/null +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1004_ca_transfer.json @@ -0,0 +1,63 @@ +{ + "timestamp": { "seconds": "1700000004", "nanos": 0 }, + "version": "1004", + "info": { + "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD=", + "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD=", + "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD=", + "gasUsed": "500", + "success": true, + "vmStatus": "Executed successfully", + "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD=", + "changes": [] + }, + "epoch": "1", + "blockHeight": "1004", + "type": "TRANSACTION_TYPE_USER", + "sizeInfo": { + "transactionBytes": 100, + "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 500 }], + "writeOpSizeInfo": [] + }, + "user": { + "request": { + "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", + "sequenceNumber": "3", + "maxGasAmount": "100000", + "gasUnitPrice": "100", + "expirationTimestampSecs": { "seconds": "9999999999" }, + "payload": { + "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", + "entryFunctionPayload": { + "function": { + "module": { "address": "0x1", "name": "confidential_asset" }, + "name": "confidential_transfer" + }, + "typeArguments": [], + "arguments": [], + "entryFunctionIdStr": "0x1::confidential_asset::confidential_transfer" + } + }, + "signature": { + "type": "TYPE_ED25519", + "ed25519": { + "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + } + } + }, + "events": [ + { + "key": { + "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { "address": "0x1", "module": "confidential_asset", "name": "Transferred" } + }, + "typeStr": "0x1::confidential_asset::Transferred", + "data": "{\"from\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"to\":\"0x2222222222222222222222222222222222222222222222222222222222222222\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"amount\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"ek_volun_auds\":\"0x\",\"sender_auditor_hint\":\"0x\",\"new_sender_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"new_recip_pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"memo\":\"0x\"}" + } + ] + } +} diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1005_ca_rollover.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1005_ca_rollover.json new file mode 100644 index 00000000..dd68b34e --- /dev/null +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1005_ca_rollover.json @@ -0,0 +1,63 @@ +{ + "timestamp": { "seconds": "1700000005", "nanos": 0 }, + "version": "1005", + "info": { + "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=", + "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=", + "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=", + "gasUsed": "500", + "success": true, + "vmStatus": "Executed successfully", + "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=", + "changes": [] + }, + "epoch": "1", + "blockHeight": "1005", + "type": "TRANSACTION_TYPE_USER", + "sizeInfo": { + "transactionBytes": 100, + "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 200 }], + "writeOpSizeInfo": [] + }, + "user": { + "request": { + "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", + "sequenceNumber": "4", + "maxGasAmount": "100000", + "gasUnitPrice": "100", + "expirationTimestampSecs": { "seconds": "9999999999" }, + "payload": { + "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", + "entryFunctionPayload": { + "function": { + "module": { "address": "0x1", "name": "confidential_asset" }, + "name": "rollover_pending_balance" + }, + "typeArguments": [], + "arguments": [], + "entryFunctionIdStr": "0x1::confidential_asset::rollover_pending_balance" + } + }, + "signature": { + "type": "TYPE_ED25519", + "ed25519": { + "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + } + } + }, + "events": [ + { + "key": { + "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { "address": "0x1", "module": "confidential_asset", "name": "RolledOver" } + }, + "typeStr": "0x1::confidential_asset::RolledOver", + "data": "{\"addr\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"new_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]}}" + } + ] + } +} diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1006_ca_normalize.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1006_ca_normalize.json new file mode 100644 index 00000000..cb25e1bf --- /dev/null +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1006_ca_normalize.json @@ -0,0 +1,63 @@ +{ + "timestamp": { "seconds": "1700000006", "nanos": 0 }, + "version": "1006", + "info": { + "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF=", + "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF=", + "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF=", + "gasUsed": "500", + "success": true, + "vmStatus": "Executed successfully", + "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF=", + "changes": [] + }, + "epoch": "1", + "blockHeight": "1006", + "type": "TRANSACTION_TYPE_USER", + "sizeInfo": { + "transactionBytes": 100, + "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 200 }], + "writeOpSizeInfo": [] + }, + "user": { + "request": { + "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", + "sequenceNumber": "5", + "maxGasAmount": "100000", + "gasUnitPrice": "100", + "expirationTimestampSecs": { "seconds": "9999999999" }, + "payload": { + "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", + "entryFunctionPayload": { + "function": { + "module": { "address": "0x1", "name": "confidential_asset" }, + "name": "normalize" + }, + "typeArguments": [], + "arguments": [], + "entryFunctionIdStr": "0x1::confidential_asset::normalize" + } + }, + "signature": { + "type": "TYPE_ED25519", + "ed25519": { + "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + } + } + }, + "events": [ + { + "key": { + "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { "address": "0x1", "module": "confidential_asset", "name": "Normalized" } + }, + "typeStr": "0x1::confidential_asset::Normalized", + "data": "{\"addr\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"new_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]}}" + } + ] + } +} diff --git a/processor/src/config/indexer_processor_config.rs b/processor/src/config/indexer_processor_config.rs index 4ed2c512..59b478fd 100644 --- a/processor/src/config/indexer_processor_config.rs +++ b/processor/src/config/indexer_processor_config.rs @@ -19,6 +19,7 @@ use crate::{ }, processors::{ account_restoration::account_restoration_processor::AccountRestorationProcessor, + confidential_asset::confidential_asset_processor::ConfidentialAssetProcessor, account_transactions::account_transactions_processor::AccountTransactionsProcessor, ans::ans_processor::AnsProcessor, default::default_processor::DefaultProcessor, events::events_processor::EventsProcessor, @@ -53,6 +54,10 @@ pub struct IndexerProcessorConfig { impl RunnableConfig for IndexerProcessorConfig { async fn run(&self) -> Result<()> { match self.processor_config { + ProcessorConfig::ConfidentialAssetProcessor(_) => { + let ca_processor = ConfidentialAssetProcessor::new(self.clone()).await?; + ca_processor.run_processor().await + }, ProcessorConfig::AccountTransactionsProcessor(_) => { let acc_txns_processor = AccountTransactionsProcessor::new(self.clone()).await?; acc_txns_processor.run_processor().await diff --git a/processor/src/config/processor_config.rs b/processor/src/config/processor_config.rs index 35d2ab1a..dd75d12f 100644 --- a/processor/src/config/processor_config.rs +++ b/processor/src/config/processor_config.rs @@ -101,6 +101,7 @@ use std::collections::HashSet; )] pub enum ProcessorConfig { AccountRestorationProcessor(DefaultProcessorConfig), + ConfidentialAssetProcessor(DefaultProcessorConfig), AccountTransactionsProcessor(DefaultProcessorConfig), AnsProcessor(AnsProcessorConfig), DefaultProcessor(DefaultProcessorConfig), diff --git a/processor/src/db/migrations/2026-04-15-000000_confidential_asset/down.sql b/processor/src/db/migrations/2026-04-15-000000_confidential_asset/down.sql new file mode 100644 index 00000000..d3aa7b59 --- /dev/null +++ b/processor/src/db/migrations/2026-04-15-000000_confidential_asset/down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS confidential_asset_activities; diff --git a/processor/src/db/migrations/2026-04-15-000000_confidential_asset/up.sql b/processor/src/db/migrations/2026-04-15-000000_confidential_asset/up.sql new file mode 100644 index 00000000..5e768cce --- /dev/null +++ b/processor/src/db/migrations/2026-04-15-000000_confidential_asset/up.sql @@ -0,0 +1,33 @@ +-- Confidential Asset processor table +-- +-- One row per confidential_asset module event (all event types). +-- Encrypted balance fields are opaque Twisted-ElGamal ciphertexts stored as JSONB. +-- The event_data column stores the fully typed event payload as self-describing JSONB: +-- {"type":"Transferred","data":{...}} +CREATE TABLE IF NOT EXISTS confidential_asset_activities ( + transaction_version BIGINT NOT NULL, + event_index BIGINT NOT NULL, + -- Short event type: "Transferred", "Registered", "FreezeChanged", etc. + event_type VARCHAR(50) NOT NULL, + -- Account address stored in the event key (the emitting object/account). + account_address VARCHAR(66) NOT NULL, + -- Fungible-asset metadata object address; NULL for AllowListChanged. + asset_type VARCHAR(66), + -- Sender / primary actor address; NULL for governance events. + from_address VARCHAR(66), + -- Recipient address; populated only for Deposited, Withdrawn, Transferred. + to_address VARCHAR(66), + -- Full typed event payload: {"type":"…","data":{…}}. + event_data JSONB NOT NULL, + block_height BIGINT NOT NULL, + transaction_timestamp TIMESTAMP NOT NULL, + inserted_at TIMESTAMP NOT NULL DEFAULT NOW(), + PRIMARY KEY (transaction_version, event_index) +); + +CREATE INDEX IF NOT EXISTS caa_account_idx ON confidential_asset_activities (account_address); +CREATE INDEX IF NOT EXISTS caa_asset_idx ON confidential_asset_activities (asset_type); +CREATE INDEX IF NOT EXISTS caa_from_idx ON confidential_asset_activities (from_address); +CREATE INDEX IF NOT EXISTS caa_to_idx ON confidential_asset_activities (to_address); +CREATE INDEX IF NOT EXISTS caa_type_idx ON confidential_asset_activities (event_type); +CREATE INDEX IF NOT EXISTS caa_insat_idx ON confidential_asset_activities (inserted_at); diff --git a/processor/src/db/schema.rs b/processor/src/db/schema.rs index 314797f1..ca964bc8 100644 --- a/processor/src/db/schema.rs +++ b/processor/src/db/schema.rs @@ -394,6 +394,27 @@ diesel::table! { } } +diesel::table! { + confidential_asset_activities (transaction_version, event_index) { + transaction_version -> Int8, + event_index -> Int8, + #[max_length = 50] + event_type -> Varchar, + #[max_length = 66] + account_address -> Varchar, + #[max_length = 66] + asset_type -> Nullable, + #[max_length = 66] + from_address -> Nullable, + #[max_length = 66] + to_address -> Nullable, + event_data -> Jsonb, + block_height -> Int8, + transaction_timestamp -> Timestamp, + inserted_at -> Timestamp, + } +} + diesel::table! { current_delegated_staking_pool_balances (staking_pool_address) { #[max_length = 66] @@ -1366,6 +1387,7 @@ diesel::allow_tables_to_appear_in_same_query!( auth_key_account_addresses, backfill_processor_status, block_metadata_transactions, + confidential_asset_activities, coin_activities, coin_balances, coin_infos, diff --git a/processor/src/processors/confidential_asset/confidential_asset_extractor.rs b/processor/src/processors/confidential_asset/confidential_asset_extractor.rs new file mode 100644 index 00000000..c4d93f8e --- /dev/null +++ b/processor/src/processors/confidential_asset/confidential_asset_extractor.rs @@ -0,0 +1,53 @@ +use crate::processors::confidential_asset::models::confidential_asset_events::{ + parse_ca_events, ConfidentialAssetActivity, +}; +use aptos_indexer_processor_sdk::{ + aptos_protos::transaction::v1::Transaction, + traits::{async_step::AsyncRunType, AsyncStep, NamedStep, Processable}, + types::transaction_context::TransactionContext, + utils::errors::ProcessorError, +}; +use async_trait::async_trait; +use rayon::prelude::*; + +/// Aggregated output for one batch of transactions. +pub struct ConfidentialAssetEvents { + pub activities: Vec, +} + +pub struct ConfidentialAssetExtractor +where + Self: Sized + Send + 'static, {} + +#[async_trait] +impl Processable for ConfidentialAssetExtractor { + type Input = Vec; + type Output = ConfidentialAssetEvents; + type RunType = AsyncRunType; + + async fn process( + &mut self, + item: TransactionContext>, + ) -> Result>, ProcessorError> { + // Parse all transactions in parallel; collect per-tx results then flatten. + let activities: Vec = item + .data + .par_iter() + .map(parse_ca_events) + .flat_map(|p| p.activities) + .collect(); + + Ok(Some(TransactionContext { + data: ConfidentialAssetEvents { activities }, + metadata: item.metadata, + })) + } +} + +impl AsyncStep for ConfidentialAssetExtractor {} + +impl NamedStep for ConfidentialAssetExtractor { + fn name(&self) -> String { + "ConfidentialAssetExtractor".to_string() + } +} diff --git a/processor/src/processors/confidential_asset/confidential_asset_processor.rs b/processor/src/processors/confidential_asset/confidential_asset_processor.rs new file mode 100644 index 00000000..a1af7602 --- /dev/null +++ b/processor/src/processors/confidential_asset/confidential_asset_processor.rs @@ -0,0 +1,145 @@ +use crate::{ + config::{ + db_config::DbConfig, indexer_processor_config::IndexerProcessorConfig, + processor_config::ProcessorConfig, + }, + processors::{ + confidential_asset::{ + confidential_asset_extractor::ConfidentialAssetExtractor, + confidential_asset_storer::ConfidentialAssetStorer, + }, + processor_status_saver::{ + get_end_version, get_starting_version, PostgresProcessorStatusSaver, + }, + }, + MIGRATIONS, +}; +use anyhow::Result; +use aptos_indexer_processor_sdk::{ + aptos_indexer_transaction_stream::TransactionStreamConfig, + builder::ProcessorBuilder, + common_steps::{ + TransactionStreamStep, VersionTrackerStep, DEFAULT_UPDATE_PROCESSOR_STATUS_SECS, + }, + postgres::utils::{ + checkpoint::PostgresChainIdChecker, + database::{new_db_pool, run_migrations, ArcDbPool}, + }, + traits::{processor_trait::ProcessorTrait, IntoRunnableStep}, + utils::chain_id_check::check_or_update_chain_id, +}; +use tracing::{debug, info}; + +pub struct ConfidentialAssetProcessor { + pub config: IndexerProcessorConfig, + pub db_pool: ArcDbPool, +} + +impl ConfidentialAssetProcessor { + pub async fn new(config: IndexerProcessorConfig) -> Result { + match config.db_config { + DbConfig::PostgresConfig(ref postgres_config) => { + let conn_pool = new_db_pool( + &postgres_config.connection_string, + Some(postgres_config.db_pool_size), + ) + .await + .map_err(|e| { + anyhow::anyhow!( + "Failed to create connection pool for ConfidentialAssetProcessor: {:?}", + e + ) + })?; + + Ok(Self { config, db_pool: conn_pool }) + }, + _ => Err(anyhow::anyhow!( + "Invalid db config for ConfidentialAssetProcessor: {:?}", + config.db_config + )), + } + } +} + +#[async_trait::async_trait] +impl ProcessorTrait for ConfidentialAssetProcessor { + fn name(&self) -> &'static str { + self.config.processor_config.name() + } + + async fn run_processor(&self) -> Result<()> { + // Run DB migrations so the confidential_asset_* tables exist. + if let DbConfig::PostgresConfig(ref postgres_config) = self.config.db_config { + run_migrations( + postgres_config.connection_string.clone(), + self.db_pool.clone(), + MIGRATIONS, + ) + .await; + } + + // Determine the version range to process. + let (starting_version, ending_version) = ( + get_starting_version(&self.config, self.db_pool.clone()).await?, + get_end_version(&self.config, self.db_pool.clone()).await?, + ); + + // Validate that we are indexing the correct chain. + check_or_update_chain_id( + &self.config.transaction_stream_config, + &PostgresChainIdChecker::new(self.db_pool.clone()), + ) + .await?; + + let processor_config = match self.config.processor_config.clone() { + ProcessorConfig::ConfidentialAssetProcessor(c) => c, + _ => { + return Err(anyhow::anyhow!( + "Invalid processor config for ConfidentialAssetProcessor: {:?}", + self.config.processor_config + )) + }, + }; + let channel_size = processor_config.channel_size; + + // Build the pipeline steps. + let transaction_stream = TransactionStreamStep::new(TransactionStreamConfig { + starting_version, + request_ending_version: ending_version, + ..self.config.transaction_stream_config.clone() + }) + .await?; + + let extractor = ConfidentialAssetExtractor {}; + let storer = ConfidentialAssetStorer::new(self.db_pool.clone(), processor_config); + let version_tracker = VersionTrackerStep::new( + PostgresProcessorStatusSaver::new(self.config.clone(), self.db_pool.clone()), + DEFAULT_UPDATE_PROCESSOR_STATUS_SECS, + ); + + // Wire the steps together and start processing. + let (_, buffer_receiver) = ProcessorBuilder::new_with_inputless_first_step( + transaction_stream.into_runnable_step(), + ) + .connect_to(extractor.into_runnable_step(), channel_size) + .connect_to(storer.into_runnable_step(), channel_size) + .connect_to(version_tracker.into_runnable_step(), channel_size) + .end_and_return_output_receiver(channel_size); + + loop { + match buffer_receiver.recv().await { + Ok(txn_context) => { + debug!( + "ConfidentialAsset: finished versions [{:?}, {:?}]", + txn_context.metadata.start_version, + txn_context.metadata.end_version, + ); + }, + Err(e) => { + info!("ConfidentialAssetProcessor: channel closed: {:?}", e); + break Ok(()); + }, + } + } + } +} diff --git a/processor/src/processors/confidential_asset/confidential_asset_storer.rs b/processor/src/processors/confidential_asset/confidential_asset_storer.rs new file mode 100644 index 00000000..c02a1994 --- /dev/null +++ b/processor/src/processors/confidential_asset/confidential_asset_storer.rs @@ -0,0 +1,116 @@ +use crate::{ + config::processor_config::DefaultProcessorConfig, + processors::confidential_asset::{ + confidential_asset_extractor::ConfidentialAssetEvents, + models::confidential_asset_events::ConfidentialAssetActivity, + }, + schema, +}; +use ahash::AHashMap; +use anyhow::Result; +use aptos_indexer_processor_sdk::{ + postgres::utils::database::{execute_in_chunks, get_config_table_chunk_size, ArcDbPool}, + traits::{async_step::AsyncRunType, AsyncStep, NamedStep, Processable}, + types::transaction_context::TransactionContext, + utils::errors::ProcessorError, +}; +use async_trait::async_trait; +use diesel::{ + pg::{upsert::excluded, Pg}, + query_builder::QueryFragment, + ExpressionMethods, +}; +use tracing::debug; + +pub struct ConfidentialAssetStorer +where + Self: Sized + Send + 'static, +{ + conn_pool: ArcDbPool, + processor_config: DefaultProcessorConfig, +} + +impl ConfidentialAssetStorer { + pub fn new(conn_pool: ArcDbPool, processor_config: DefaultProcessorConfig) -> Self { + Self { conn_pool, processor_config } + } +} + +#[async_trait] +impl Processable for ConfidentialAssetStorer { + type Input = ConfidentialAssetEvents; + type Output = (); + type RunType = AsyncRunType; + + async fn process( + &mut self, + events: TransactionContext, + ) -> Result>, ProcessorError> { + let per_table_chunk_sizes: AHashMap = + self.processor_config.per_table_chunk_sizes.clone(); + + let activities_res = execute_in_chunks( + self.conn_pool.clone(), + insert_activities_query, + &events.data.activities, + get_config_table_chunk_size::( + "confidential_asset_activities", + &per_table_chunk_sizes, + ), + ) + .await; + + if let Err(e) = activities_res { + return Err(ProcessorError::DBStoreError { + message: format!( + "Failed to store confidential_asset_activities for versions {} to {}: {:?}", + events.metadata.start_version, events.metadata.end_version, e, + ), + query: None, + }); + } + + debug!( + "ConfidentialAsset versions [{}, {}] stored: {} activities", + events.metadata.start_version, + events.metadata.end_version, + events.data.activities.len(), + ); + + Ok(Some(TransactionContext { data: (), metadata: events.metadata })) + } +} + +impl AsyncStep for ConfidentialAssetStorer {} + +impl NamedStep for ConfidentialAssetStorer { + fn name(&self) -> String { + "ConfidentialAssetStorer".to_string() + } +} + +// --------------------------------------------------------------------------- +// Query builder +// --------------------------------------------------------------------------- + +fn insert_activities_query( + items: Vec, +) -> impl QueryFragment + diesel::query_builder::QueryId + Send { + use schema::confidential_asset_activities::dsl::*; + + diesel::insert_into(schema::confidential_asset_activities::table) + .values(items) + .on_conflict((transaction_version, event_index)) + .do_update() + .set(( + event_type.eq(excluded(event_type)), + account_address.eq(excluded(account_address)), + asset_type.eq(excluded(asset_type)), + from_address.eq(excluded(from_address)), + to_address.eq(excluded(to_address)), + event_data.eq(excluded(event_data)), + block_height.eq(excluded(block_height)), + transaction_timestamp.eq(excluded(transaction_timestamp)), + inserted_at.eq(excluded(inserted_at)), + )) +} diff --git a/processor/src/processors/confidential_asset/mod.rs b/processor/src/processors/confidential_asset/mod.rs new file mode 100644 index 00000000..338c4e79 --- /dev/null +++ b/processor/src/processors/confidential_asset/mod.rs @@ -0,0 +1,4 @@ +pub mod confidential_asset_extractor; +pub mod confidential_asset_processor; +pub mod confidential_asset_storer; +pub mod models; diff --git a/processor/src/processors/confidential_asset/models/confidential_asset_events.rs b/processor/src/processors/confidential_asset/models/confidential_asset_events.rs new file mode 100644 index 00000000..7e625714 --- /dev/null +++ b/processor/src/processors/confidential_asset/models/confidential_asset_events.rs @@ -0,0 +1,366 @@ +use crate::schema::confidential_asset_activities; +use anyhow::{Context, Result}; +use aptos_indexer_processor_sdk::{ + aptos_indexer_transaction_stream::utils::time::parse_timestamp, + aptos_protos::transaction::v1::{transaction::TxnData, Event, Transaction}, + utils::convert::standardize_address, +}; +use field_count::FieldCount; +use serde::{Deserialize, Serialize}; +use tracing::warn; + +// --------------------------------------------------------------------------- +// Constants +// --------------------------------------------------------------------------- + +/// Substring present in every event type emitted by the confidential_asset module. +/// Matches both `0x7::confidential_asset::*` and `0x1::confidential_asset::*`. +const CA_MODULE_MARKER: &str = "::confidential_asset::"; + +// --------------------------------------------------------------------------- +// Opaque crypto type aliases +// --------------------------------------------------------------------------- + +/// Compressed Twisted-ElGamal ciphertext (four-chunk balance or single-chunk amount). +/// Stored as a JSONB blob — the indexer does not decrypt or validate its contents. +pub type CompressedBalance = serde_json::Value; + +/// Compressed Twisted-ElGamal public key. +/// Stored as a JSONB blob. +pub type CompressedPubkey = serde_json::Value; + +// --------------------------------------------------------------------------- +// Per-event wire-format structs +// --------------------------------------------------------------------------- + +/// `confidential_asset::Registered` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct RegisteredEvent { + pub addr: String, + pub asset_type: String, + /// Encryption key registered for this account/asset pair. + pub ek: CompressedPubkey, +} + +/// `confidential_asset::Deposited` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct DepositedEvent { + pub from: String, + pub to: String, + pub asset_type: String, + /// Plaintext amount brought into the protocol (serialized as a string by the node). + pub amount: serde_json::Value, + /// Recipient's new pending balance ciphertext after the deposit. + pub new_pending_balance: CompressedBalance, +} + +/// `confidential_asset::Withdrawn` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct WithdrawnEvent { + pub from: String, + pub to: String, + pub asset_type: String, + /// Plaintext amount taken out of the protocol (serialized as a string by the node). + pub amount: serde_json::Value, + /// Sender's new available balance ciphertext after the withdrawal. + pub new_available_balance: CompressedBalance, +} + +/// `confidential_asset::Transferred` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct TransferredEvent { + pub from: String, + pub to: String, + pub asset_type: String, + /// Encrypted transfer amount under the recipient key (four-chunk pending-balance layout). + pub amount: CompressedBalance, + /// Flattened transfer sigma `x7s` commitments: `128 × n` bytes, hex-encoded. + pub ek_volun_auds: String, + /// Opaque sender-supplied auditor hint bytes, hex-encoded. + pub sender_auditor_hint: String, + /// Sender's new available balance ciphertext after the debit. + pub new_sender_available_balance: CompressedBalance, + /// Recipient's new pending balance ciphertext after the credit. + pub new_recip_pending_balance: CompressedBalance, + /// Reserved memo payload (currently always empty), hex-encoded. + pub memo: String, +} + +/// `confidential_asset::Normalized` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct NormalizedEvent { + pub addr: String, + pub asset_type: String, + /// New available balance ciphertext after re-encryption to normalize chunk bounds. + pub new_available_balance: CompressedBalance, +} + +/// `confidential_asset::RolledOver` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct RolledOverEvent { + pub addr: String, + pub asset_type: String, + /// New available balance ciphertext after the pending balance was rolled in. + pub new_available_balance: CompressedBalance, +} + +/// `confidential_asset::KeyRotated` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct KeyRotatedEvent { + pub addr: String, + pub asset_type: String, + /// The new encryption key after rotation. + pub new_ek: CompressedPubkey, + /// Available balance re-encrypted under the new key. + pub new_available_balance: CompressedBalance, +} + +/// `confidential_asset::FreezeChanged` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct FreezeChangedEvent { + pub addr: String, + pub asset_type: String, + /// `true` = incoming transfers paused; `false` = resumed. + pub frozen: bool, +} + +/// `confidential_asset::AllowListChanged` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct AllowListChangedEvent { + /// `true` = global allow list enabled; `false` = disabled. + pub enabled: bool, +} + +/// `confidential_asset::TokenAllowChanged` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct TokenAllowChangedEvent { + pub asset_type: String, + /// `true` = confidential transfers permitted for this token; `false` = disabled. + pub allowed: bool, +} + +/// `confidential_asset::AuditorChanged` +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct AuditorChangedEvent { + pub asset_type: String, + /// New asset-specific auditor key, or `None` (as `{"vec":[]}`) when cleared. + pub new_auditor_ek: serde_json::Value, +} + +// --------------------------------------------------------------------------- +// CaEvent enum +// --------------------------------------------------------------------------- + +/// Typed representation of every event emitted by the `confidential_asset` module. +/// +/// Serialized with an adjacently-tagged layout so the stored JSONB is self-describing: +/// `{"type":"Transferred","data":{...}}`. +#[derive(Debug, Clone, Serialize)] +#[serde(tag = "type", content = "data")] +pub enum CaEvent { + Registered(RegisteredEvent), + Deposited(DepositedEvent), + Withdrawn(WithdrawnEvent), + Transferred(TransferredEvent), + Normalized(NormalizedEvent), + RolledOver(RolledOverEvent), + KeyRotated(KeyRotatedEvent), + FreezeChanged(FreezeChangedEvent), + AllowListChanged(AllowListChangedEvent), + TokenAllowChanged(TokenAllowChangedEvent), + AuditorChanged(AuditorChangedEvent), +} + +impl CaEvent { + /// Attempts to parse a raw event into a typed `CaEvent`. + /// + /// Returns `Ok(None)` for non-CA events and for unknown CA variant names + /// (forward-compatibility). Returns an error only when the event type matches + /// a known CA variant but the payload cannot be deserialized. + pub fn from_event(type_str: &str, data: &str, txn_version: i64) -> Result> { + if !type_str.contains(CA_MODULE_MARKER) { + return Ok(None); + } + let short = short_event_type(type_str); + let result = match short { + "Registered" => serde_json::from_str(data).map(|e| Some(Self::Registered(e))), + "Deposited" => serde_json::from_str(data).map(|e| Some(Self::Deposited(e))), + "Withdrawn" => serde_json::from_str(data).map(|e| Some(Self::Withdrawn(e))), + "Transferred" => serde_json::from_str(data).map(|e| Some(Self::Transferred(e))), + "Normalized" => serde_json::from_str(data).map(|e| Some(Self::Normalized(e))), + "RolledOver" => serde_json::from_str(data).map(|e| Some(Self::RolledOver(e))), + "KeyRotated" => serde_json::from_str(data).map(|e| Some(Self::KeyRotated(e))), + "FreezeChanged" => serde_json::from_str(data).map(|e| Some(Self::FreezeChanged(e))), + "AllowListChanged" => { + serde_json::from_str(data).map(|e| Some(Self::AllowListChanged(e))) + }, + "TokenAllowChanged" => { + serde_json::from_str(data).map(|e| Some(Self::TokenAllowChanged(e))) + }, + "AuditorChanged" => serde_json::from_str(data).map(|e| Some(Self::AuditorChanged(e))), + _ => return Ok(None), + }; + result.context(format!( + "version {txn_version}: failed to parse {type_str}: {data}" + )) + } + + /// The fungible-asset metadata object address, if present for this event type. + pub fn asset_type(&self) -> Option { + match self { + Self::Registered(e) => Some(standardize_address(&e.asset_type)), + Self::Deposited(e) => Some(standardize_address(&e.asset_type)), + Self::Withdrawn(e) => Some(standardize_address(&e.asset_type)), + Self::Transferred(e) => Some(standardize_address(&e.asset_type)), + Self::Normalized(e) => Some(standardize_address(&e.asset_type)), + Self::RolledOver(e) => Some(standardize_address(&e.asset_type)), + Self::KeyRotated(e) => Some(standardize_address(&e.asset_type)), + Self::FreezeChanged(e) => Some(standardize_address(&e.asset_type)), + Self::TokenAllowChanged(e) => Some(standardize_address(&e.asset_type)), + Self::AuditorChanged(e) => Some(standardize_address(&e.asset_type)), + Self::AllowListChanged(_) => None, + } + } + + /// The "from" / primary actor address, if present for this event type. + pub fn from_address(&self) -> Option { + match self { + Self::Deposited(e) => Some(standardize_address(&e.from)), + Self::Withdrawn(e) => Some(standardize_address(&e.from)), + Self::Transferred(e) => Some(standardize_address(&e.from)), + Self::Registered(e) => Some(standardize_address(&e.addr)), + Self::Normalized(e) => Some(standardize_address(&e.addr)), + Self::RolledOver(e) => Some(standardize_address(&e.addr)), + Self::KeyRotated(e) => Some(standardize_address(&e.addr)), + Self::FreezeChanged(e) => Some(standardize_address(&e.addr)), + _ => None, + } + } + + /// The "to" / recipient address, if present for this event type. + pub fn to_address(&self) -> Option { + match self { + Self::Deposited(e) => Some(standardize_address(&e.to)), + Self::Withdrawn(e) => Some(standardize_address(&e.to)), + Self::Transferred(e) => Some(standardize_address(&e.to)), + _ => None, + } + } +} + +// --------------------------------------------------------------------------- +// Database model +// --------------------------------------------------------------------------- + +/// One row in `confidential_asset_activities` — one per CA event of any type. +#[derive(Clone, Debug, Deserialize, FieldCount, Identifiable, Insertable, Serialize)] +#[diesel(primary_key(transaction_version, event_index))] +#[diesel(table_name = confidential_asset_activities)] +pub struct ConfidentialAssetActivity { + pub transaction_version: i64, + pub event_index: i64, + /// Short event variant name: "Transferred", "Registered", etc. + pub event_type: String, + /// Account address from the event key (the emitting object/account). + pub account_address: String, + /// Fungible-asset metadata object address; `None` for `AllowListChanged`. + pub asset_type: Option, + /// Sender / primary actor address; `None` for governance events. + pub from_address: Option, + /// Recipient address; populated only for `Deposited`, `Withdrawn`, `Transferred`. + pub to_address: Option, + /// Full typed event payload serialized as JSONB: `{"type":"…","data":{…}}`. + pub event_data: serde_json::Value, + pub block_height: i64, + pub transaction_timestamp: chrono::NaiveDateTime, + pub inserted_at: chrono::NaiveDateTime, +} + +// --------------------------------------------------------------------------- +// Parsing +// --------------------------------------------------------------------------- + +/// Output of parsing one transaction. +pub struct ParsedCaEvents { + pub activities: Vec, +} + +/// Parses all confidential-asset events from a single transaction. +pub fn parse_ca_events(txn: &Transaction) -> ParsedCaEvents { + let txn_version = txn.version as i64; + let block_height = txn.block_height as i64; + let block_timestamp = + parse_timestamp(txn.timestamp.as_ref().unwrap(), txn_version).naive_utc(); + let now = chrono::Utc::now().naive_utc(); + + let raw_events: &Vec = match txn.txn_data.as_ref() { + Some(TxnData::User(u)) => &u.events, + Some(TxnData::BlockMetadata(b)) => &b.events, + Some(TxnData::Genesis(g)) => &g.events, + Some(TxnData::Validator(v)) => &v.events, + _ => return ParsedCaEvents { activities: vec![] }, + }; + + let mut activities: Vec = Vec::new(); + + for (index, event) in raw_events.iter().enumerate() { + let type_str = event.type_str.as_str(); + let event_index = index as i64; + + let ca_event = match CaEvent::from_event(type_str, &event.data, txn_version) { + Ok(Some(e)) => e, + Ok(None) => continue, + Err(e) => { + warn!( + transaction_version = txn_version, + event_index, + type_str, + "Failed to parse CA event: {e:#}" + ); + continue; + }, + }; + + let short_type = short_event_type(type_str).to_string(); + let account_address = standardize_address( + event + .key + .as_ref() + .map(|k| k.account_address.as_str()) + .unwrap_or(""), + ); + let asset_type = ca_event.asset_type(); + let from_address = ca_event.from_address(); + let to_address = ca_event.to_address(); + let event_data = serde_json::to_value(&ca_event).unwrap_or(serde_json::Value::Null); + + activities.push(ConfidentialAssetActivity { + transaction_version: txn_version, + event_index, + event_type: short_type, + account_address, + asset_type, + from_address, + to_address, + event_data, + block_height, + transaction_timestamp: block_timestamp, + inserted_at: now, + }); + } + + ParsedCaEvents { activities } +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/// Extracts the short variant name from a fully-qualified type string. +/// `"0x1::confidential_asset::Transferred"` → `"Transferred"` +fn short_event_type(type_str: &str) -> &str { + type_str + .rfind("::") + .map(|pos| &type_str[pos + 2..]) + .unwrap_or(type_str) +} diff --git a/processor/src/processors/confidential_asset/models/mod.rs b/processor/src/processors/confidential_asset/models/mod.rs new file mode 100644 index 00000000..c131beaf --- /dev/null +++ b/processor/src/processors/confidential_asset/models/mod.rs @@ -0,0 +1 @@ +pub mod confidential_asset_events; diff --git a/processor/src/processors/mod.rs b/processor/src/processors/mod.rs index 84eb391f..338ec3fd 100644 --- a/processor/src/processors/mod.rs +++ b/processor/src/processors/mod.rs @@ -1,4 +1,5 @@ pub mod account_restoration; +pub mod confidential_asset; pub mod account_transactions; pub mod ans; pub mod default; From 3d3db375e9a82dc340046b0e93f39e0416f4a9f0 Mon Sep 17 00:00:00 2001 From: musitdev Date: Tue, 28 Apr 2026 16:19:48 +0200 Subject: [PATCH 2/3] add CA sdk test for all Tx events --- .../confidential_asset_activities.json | 55 +++ .../confidential_asset_activities.json | 91 +++++ .../confidential_asset_activities.json | 86 +++++ .../confidential_asset_activities.json | 18 +- .../confidential_asset_activities.json | 46 ++- .../confidential_asset_activities.json | 161 ++++++++ .../confidential_asset_activities.json | 87 +++++ .../confidential_asset_processor_tests.rs | 54 +-- .../confidential_asset/1001_ca_register.json | 259 +++++++++++-- .../confidential_asset/1002_ca_deposit.json | 312 +++++++++++++-- .../confidential_asset/1003_ca_withdraw.json | 364 ++++++++++++++++-- .../confidential_asset/1004_ca_transfer.json | 248 ++++++++++-- .../confidential_asset/1005_ca_rollover.json | 236 ++++++++++-- .../confidential_asset/1006_ca_normalize.json | 241 ++++++++++-- .../1007_ca_key_rotate.json | 245 ++++++++++++ processor/ca-local-config.yaml | 16 + .../models/confidential_asset_events.rs | 21 + 17 files changed, 2290 insertions(+), 250 deletions(-) create mode 100644 integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_deposit/confidential_asset_activities.json create mode 100644 integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_key_rotate/confidential_asset_activities.json create mode 100644 integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_normalize/confidential_asset_activities.json create mode 100644 integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_transfer/confidential_asset_activities.json create mode 100644 integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_withdraw/confidential_asset_activities.json create mode 100644 integration-tests/src/sdk_tests/test_transactions/confidential_asset/1007_ca_key_rotate.json create mode 100644 processor/ca-local-config.yaml diff --git a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_deposit/confidential_asset_activities.json b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_deposit/confidential_asset_activities.json new file mode 100644 index 00000000..87cae156 --- /dev/null +++ b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_deposit/confidential_asset_activities.json @@ -0,0 +1,55 @@ +[ + { + "transaction_version": 4627, + "event_index": 2, + "event_type": "Deposited", + "account_address": "0x0000000000000000000000000000000000000000000000000000000000000000", + "asset_type": "0x000000000000000000000000000000000000000000000000000000000000000a", + "from_address": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "to_address": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "event_data": { + "data": { + "amount": "50000000", + "new_pending_balance": { + "chunks": [ + { + "left": { + "data": "0x7af2072a5cd06e2969a0b5b0a204f32b4cdfa573e7d92bb5ae750778ac830d2a" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "left": { + "data": "0x3ecba725a17ef10c1d20c27a08640918a62196c19b07e5e0bbff237678fce873" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "left": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "left": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + ] + } + }, + "type": "Deposited" + }, + "block_height": 2310, + "transaction_timestamp": "2026-04-27T08:35:08.415727" + } +] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_key_rotate/confidential_asset_activities.json b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_key_rotate/confidential_asset_activities.json new file mode 100644 index 00000000..6bae7160 --- /dev/null +++ b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_key_rotate/confidential_asset_activities.json @@ -0,0 +1,91 @@ +[ + { + "transaction_version": 4827, + "event_index": 0, + "event_type": "KeyRotated", + "account_address": "0x0000000000000000000000000000000000000000000000000000000000000000", + "asset_type": "0x000000000000000000000000000000000000000000000000000000000000000a", + "from_address": "0x736f3af18eb712d517f36f103ae156979076e0eab11335b43d1c98a7a855348d", + "to_address": null, + "event_data": { + "data": { + "new_ek": { + "point": { + "data": "0x7ea6e108a22cf9e8112085c8d3b8bdc73d2fd8317309040135cdc4ef4970b12a" + } + }, + "new_available_balance": { + "chunks": [ + { + "left": { + "data": "0xbe8fae5aba97cee3126f8568b193bff19b2e105a910d3cd7fb3aef7858f6c90f" + }, + "right": { + "data": "0x3edc9e7dfcfd5788e7769d637762e1e4c50791524c9485e5fbc070e30aa8d71c" + } + }, + { + "left": { + "data": "0x84dae8768b6e5de0554dc1d69289f06bb15be0f8b4db0efb46adfba894772857" + }, + "right": { + "data": "0xe8ee14e803fe877ddacf1f934c8477a4b16ccf089a3783c3ed3805a6d3223e55" + } + }, + { + "left": { + "data": "0xf460f992c1d9c3e8bc2438839503632f9e97abefaa5101b911eeae751996f23b" + }, + "right": { + "data": "0xa4189ce6f0633be540f018ac4e9f91ed6ca674337dc2d881d6617b7eb82fc56e" + } + }, + { + "left": { + "data": "0xd0d3c881492de60a0cfa520ebb2e961cd9aa00358c4f2c10061c5c0dd44b8932" + }, + "right": { + "data": "0x46051f4c2453206bb8c8492f9ac347754026502b3cfb87128c0e876062f57826" + } + }, + { + "left": { + "data": "0xa61a08f43303ad833655340b8082d9fc4ed3dfa2a630122a4ecaad1e4717a910" + }, + "right": { + "data": "0xaa7d3a9ca7cdf57cfce6dbe8b186f9b2e12308bbaa092ff16830ce4d1a9edc05" + } + }, + { + "left": { + "data": "0xca81088a1c2d60881b8f7ccd6e128ddc4bf1f23affdfd7a73587fa9473dea634" + }, + "right": { + "data": "0x16109b2ea1ccc266198bf48aa2376b491d703bde968dc95a49ebf9a5cdbed95a" + } + }, + { + "left": { + "data": "0xcea698ac554e4775bec294fbcd695e0fc4520ae5b239797a76d06fdb769e0e03" + }, + "right": { + "data": "0x289d1aab0bb60a2278dce7d41845d069ad0c24f69f60fe207e9b874515370755" + } + }, + { + "left": { + "data": "0x84708d1510c391e68a19e0f5a209aedf85a0fc1064521f9b15d5d98c401f2663" + }, + "right": { + "data": "0x7e97c71ef9fe3df8a3b9752985480dc18b08fc1ef4faa0343ac366e86ef71108" + } + } + ] + } + }, + "type": "KeyRotated" + }, + "block_height": 2390, + "transaction_timestamp": "2026-04-27T08:35:24.990165" + } +] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_normalize/confidential_asset_activities.json b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_normalize/confidential_asset_activities.json new file mode 100644 index 00000000..9fabd534 --- /dev/null +++ b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_normalize/confidential_asset_activities.json @@ -0,0 +1,86 @@ +[ + { + "transaction_version": 4637, + "event_index": 0, + "event_type": "Normalized", + "account_address": "0x0000000000000000000000000000000000000000000000000000000000000000", + "asset_type": "0x000000000000000000000000000000000000000000000000000000000000000a", + "from_address": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "to_address": null, + "event_data": { + "data": { + "new_available_balance": { + "chunks": [ + { + "left": { + "data": "0xa4d8625a5f118d204e5ccc662920e2d012e8c3a4d5ef96b3059dec4f7f681172" + }, + "right": { + "data": "0x5aa8655e95e7379952253b9ea349edc96f579261b3bb940d4444c6e34b8dd77b" + } + }, + { + "left": { + "data": "0x10632171d1d0b2af37e553384af6f68fa7e64bf83a38f4a55f8a4aace3f73c69" + }, + "right": { + "data": "0x28671d90dcef7747783444a94d1e2e5db74d39af701524706489ae6ea83f075d" + } + }, + { + "left": { + "data": "0xdcd04e5fafa52c8ebaf692f3324de913e0e48acd8e8525a70bd63d67c0619377" + }, + "right": { + "data": "0x0e0d53a6ba74985a5f277314513948f32ecf2a68297bd9860c0b26b60a164301" + } + }, + { + "left": { + "data": "0xda31f760f1b8f33c0694d6507fecaeab8fdee3f380bae7e3d7fd46e4b0160520" + }, + "right": { + "data": "0xe4bdd3cc1aad12b7e66a967e3ef9f6ffd446d2e1d707d2b94b158ac61c0a2974" + } + }, + { + "left": { + "data": "0x767a598977b1cb71b2e929caae9b7af0987b8bc190ba7d270a2e63ca97375800" + }, + "right": { + "data": "0xba183855cf3528e7b106e83f9c767676da314af8fcef226ccc5cb127b59e0b5f" + } + }, + { + "left": { + "data": "0x78e6d39fbca69eb39a37a9a0f37407a89087c4c54c866b0c59ec1991e259fc1a" + }, + "right": { + "data": "0x289653f502235d2997e5e9610e0acb297ac6dd68968a650b5a98047b308bab7f" + } + }, + { + "left": { + "data": "0x8e38351981e4c073a43c33f9ba31342851ec4da18869079adc40d6f59a721877" + }, + "right": { + "data": "0x5e9ef79bafaf24f3cedd74e5b254aa104bd6263ec2f77ec1a435e499b876e911" + } + }, + { + "left": { + "data": "0x36bd96c788123729a59e4eae4c462bdf31b89ac82f4caf788a6ef5364a661e3f" + }, + "right": { + "data": "0x749ed067061ef768a17275730e896f8dad33c99003cad66dd4c1ccaf0ac7691d" + } + } + ] + } + }, + "type": "Normalized" + }, + "block_height": 2314, + "transaction_timestamp": "2026-04-27T08:35:09.886903" + } +] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_register/confidential_asset_activities.json b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_register/confidential_asset_activities.json index 899d2a23..3a32fb3d 100644 --- a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_register/confidential_asset_activities.json +++ b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_register/confidential_asset_activities.json @@ -1,25 +1,23 @@ [ { - "transaction_version": 1001, + "transaction_version": 4622, "event_index": 0, "event_type": "Registered", - "account_address": "0x1111111111111111111111111111111111111111111111111111111111111111", - "asset_type": "0x3333333333333333333333333333333333333333333333333333333333333333", - "from_address": "0x1111111111111111111111111111111111111111111111111111111111111111", + "account_address": "0x0000000000000000000000000000000000000000000000000000000000000000", + "asset_type": "0x000000000000000000000000000000000000000000000000000000000000000a", + "from_address": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", "to_address": null, "event_data": { "data": { "ek": { "point": { - "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + "data": "0x02bd8e95f31ca30e8e34d281cadf6c2cc3aafedce687cf7343b0dcea8d23da42" } - }, - "addr": "0x1111111111111111111111111111111111111111111111111111111111111111", - "asset_type": "0x3333333333333333333333333333333333333333333333333333333333333333" + } }, "type": "Registered" }, - "block_height": 1001, - "transaction_timestamp": "2023-11-14T22:13:21" + "block_height": 2308, + "transaction_timestamp": "2026-04-27T08:35:08.139543" } ] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_rollover/confidential_asset_activities.json b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_rollover/confidential_asset_activities.json index 0790bdc3..ffefb0d0 100644 --- a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_rollover/confidential_asset_activities.json +++ b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_rollover/confidential_asset_activities.json @@ -1,18 +1,48 @@ [ { - "transaction_version": 1005, + "transaction_version": 4632, "event_index": 0, "event_type": "RolledOver", - "account_address": "0x1111111111111111111111111111111111111111111111111111111111111111", - "asset_type": "0x3333333333333333333333333333333333333333333333333333333333333333", - "from_address": "0x1111111111111111111111111111111111111111111111111111111111111111", + "account_address": "0x0000000000000000000000000000000000000000000000000000000000000000", + "asset_type": "0x000000000000000000000000000000000000000000000000000000000000000a", + "from_address": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", "to_address": null, "event_data": { "data": { - "addr": "0x1111111111111111111111111111111111111111111111111111111111111111", - "asset_type": "0x3333333333333333333333333333333333333333333333333333333333333333", "new_available_balance": { "chunks": [ + { + "left": { + "data": "0x7af2072a5cd06e2969a0b5b0a204f32b4cdfa573e7d92bb5ae750778ac830d2a" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "left": { + "data": "0x3ecba725a17ef10c1d20c27a08640918a62196c19b07e5e0bbff237678fce873" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "left": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "left": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + "right": { + "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, { "left": { "data": "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -50,7 +80,7 @@ }, "type": "RolledOver" }, - "block_height": 1005, - "transaction_timestamp": "2023-11-14T22:13:25" + "block_height": 2312, + "transaction_timestamp": "2026-04-27T08:35:08.634586" } ] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_transfer/confidential_asset_activities.json b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_transfer/confidential_asset_activities.json new file mode 100644 index 00000000..d75701b1 --- /dev/null +++ b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_transfer/confidential_asset_activities.json @@ -0,0 +1,161 @@ +[ + { + "transaction_version": 4917, + "event_index": 0, + "event_type": "Transferred", + "account_address": "0x0000000000000000000000000000000000000000000000000000000000000000", + "asset_type": "0x000000000000000000000000000000000000000000000000000000000000000a", + "from_address": "0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954", + "to_address": "0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954", + "event_data": { + "data": { + "memo": "0x", + "amount": { + "chunks": [ + { + "left": { + "data": "0xa6d9c2788c87535dcf51c85eda837b161c71a35d90ca9b44819033f943b96a4f" + }, + "right": { + "data": "0xd46db6e17717ee5ba05807ebe09ec3889741a61a37fdb841fc66f6056303ca50" + } + }, + { + "left": { + "data": "0x5ee9799db35dfd26c0704b647c428ea67e25cb56cd706ce959263c02dcfaf624" + }, + "right": { + "data": "0x90dc38fbd63dcd06fdd53ce1f630562a77f62be51bc1e57f0236720396e27c12" + } + }, + { + "left": { + "data": "0x464fbd2581bf6a961cfae713919d839ecc691b40b0bf2f194329b872983f3a18" + }, + "right": { + "data": "0x14291a03dd87c6fd1bd1322f70ec0a7d8648ed3548608a79ab30607074057648" + } + }, + { + "left": { + "data": "0x061d2480b947fa5015b8b12129352504d8f8d98b8eafb404763726741ba56e77" + }, + "right": { + "data": "0x7c7e39d3d99d0e39b9b319635f5e64cd6060d1c0ab3cc4650699829bec8d4208" + } + } + ] + }, + "ek_volun_auds": "0x", + "sender_auditor_hint": "0x", + "new_recip_pending_balance": { + "chunks": [ + { + "left": { + "data": "0xa6d9c2788c87535dcf51c85eda837b161c71a35d90ca9b44819033f943b96a4f" + }, + "right": { + "data": "0xd46db6e17717ee5ba05807ebe09ec3889741a61a37fdb841fc66f6056303ca50" + } + }, + { + "left": { + "data": "0x5ee9799db35dfd26c0704b647c428ea67e25cb56cd706ce959263c02dcfaf624" + }, + "right": { + "data": "0x90dc38fbd63dcd06fdd53ce1f630562a77f62be51bc1e57f0236720396e27c12" + } + }, + { + "left": { + "data": "0x464fbd2581bf6a961cfae713919d839ecc691b40b0bf2f194329b872983f3a18" + }, + "right": { + "data": "0x14291a03dd87c6fd1bd1322f70ec0a7d8648ed3548608a79ab30607074057648" + } + }, + { + "left": { + "data": "0x061d2480b947fa5015b8b12129352504d8f8d98b8eafb404763726741ba56e77" + }, + "right": { + "data": "0x7c7e39d3d99d0e39b9b319635f5e64cd6060d1c0ab3cc4650699829bec8d4208" + } + } + ] + }, + "new_sender_available_balance": { + "chunks": [ + { + "left": { + "data": "0xb27ce0857bf821841eacba87617d7168faf3949613727f0f658bf7024b129a7d" + }, + "right": { + "data": "0xa07d34405842876a94e44ee060518df2969a64037f58afd1889524914e40a21b" + } + }, + { + "left": { + "data": "0x60eec74a6958f5845b55d83b149e84353b46be08ec6e45523548ff8647dae540" + }, + "right": { + "data": "0x68d72b582ec7134c6221c4244c32a4fa627a9f8231678c99c0c7d2adc38b4308" + } + }, + { + "left": { + "data": "0x0087c488322548f53203076a304c7dbec8021b9232f3cd1e04fa2bedcae79e37" + }, + "right": { + "data": "0xb8f7b1d57ee8c6a3bd536b3bb30eb752a41812bf4248af5376f7ce843724dc69" + } + }, + { + "left": { + "data": "0xf04a18dd9cb22742164b51656227a8b7256d8d1fa31d81995f9a88b3702d4f67" + }, + "right": { + "data": "0x92d5fc1bb038e044d6f011f0b3a5946ff35802de94e160aff20fab7fb3630343" + } + }, + { + "left": { + "data": "0x66f3d9547d729f3b352eb4a0c4f2847210c474d7dd47953cbce4616f2da6844d" + }, + "right": { + "data": "0xf285787ca748c1d00f8e3e46b46ea5a8037197e35f41c12553788ec2f4c4dd57" + } + }, + { + "left": { + "data": "0xb84196c66229b5e5b4a3a1b085bd128b569e13f7b975f97f458984bdd61f063d" + }, + "right": { + "data": "0xa80d8940ce677379b12e1fc70373baded34a18fc383a856dc7f65da11d499e66" + } + }, + { + "left": { + "data": "0x6ed1004acbde6b59f702892dde2e08bdf4b21e39315c3faebac3eab33c1ab26a" + }, + "right": { + "data": "0x5633f629d24a56994311f4d7ad7e4c50b7f57a21235525b6fa1a566c0946f067" + } + }, + { + "left": { + "data": "0x6616db4046c8a3050cd4fe68633491e10eed574a48c783f76f379ea57b9ee059" + }, + "right": { + "data": "0xa869cdff01aa527a2c965f8e447544c4a3e2f87b852222872e941f3395f6c152" + } + } + ] + } + }, + "type": "Transferred" + }, + "block_height": 2426, + "transaction_timestamp": "2026-04-27T08:35:35.779028" + } +] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_withdraw/confidential_asset_activities.json b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_withdraw/confidential_asset_activities.json new file mode 100644 index 00000000..f36aba73 --- /dev/null +++ b/integration-tests/sdk_expected_db_output_files/confidential_asset_processor/ca_withdraw/confidential_asset_activities.json @@ -0,0 +1,87 @@ +[ + { + "transaction_version": 5017, + "event_index": 2, + "event_type": "Withdrawn", + "account_address": "0x0000000000000000000000000000000000000000000000000000000000000000", + "asset_type": "0x000000000000000000000000000000000000000000000000000000000000000a", + "from_address": "0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c", + "to_address": "0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c", + "event_data": { + "data": { + "amount": "1", + "new_available_balance": { + "chunks": [ + { + "left": { + "data": "0x940c973484a137eab680ee0dc14338d10899672eff466a6eef9cd7fc44335c10" + }, + "right": { + "data": "0x2ed7895ac513e625a471ca763f295c00f9e828747dac4c3f7ead7fa2625f7e0b" + } + }, + { + "left": { + "data": "0xdc4b23b15633c7197698a979561b5bba00cbe7c737309a7cf718f8348baf335b" + }, + "right": { + "data": "0x327366cb6bf400c47a1d54a513f0bc7fa2250c74f26846091897ec2c1c5f165e" + } + }, + { + "left": { + "data": "0x74db3b9edb4f3813a8eae9e87a1f5d2e2f7e87f5a78699a068099a27c1008b70" + }, + "right": { + "data": "0x9e0d2a4fa2fdf002104da5d2ab10cea262f9f855184ae156856ec105c0617f54" + } + }, + { + "left": { + "data": "0xa24c2e0ba6b7e2a3a0fb0f2e037798f9c94043f43d44360b9af03e8d952a3e5a" + }, + "right": { + "data": "0xda405fcb71236f3a4a44e1994a272de06dbb77861d30461c4a3cd14e0565d728" + } + }, + { + "left": { + "data": "0x7e92381f4f538ae6ffbf8e61a99406446b8a3d5312e552a639f4387ee595d11f" + }, + "right": { + "data": "0x804c8195c352878877d4fa482e4795dd120237acbf6c7fd3a56cb04c33fc6339" + } + }, + { + "left": { + "data": "0xf0999ae3182f720a5f5b19c6831096d909f60a745476cdb09232ca58a9cfb202" + }, + "right": { + "data": "0x4e3e3bbcda44b0742085462be8a555413df306b9fcdd955c4fe9ae2935b67519" + } + }, + { + "left": { + "data": "0x8c3766035b1dad8c369f9f5298cd90a37034bd60a75f8532856081e292e9b312" + }, + "right": { + "data": "0x70c386d83fa91a137d48aa4fa64d8b9dc9190e1df6bb5f37d96e33385443336e" + } + }, + { + "left": { + "data": "0xb41d9f8285b73abf0d932f493c734fdd210f6b9592554658fa3c286a1eb40258" + }, + "right": { + "data": "0x7674eaa4e41b927737edc5d6156558541434f8e9af1a15d7134baf5ceb91d72c" + } + } + ] + } + }, + "type": "Withdrawn" + }, + "block_height": 2466, + "transaction_timestamp": "2026-04-27T08:35:48.294159" + } +] \ No newline at end of file diff --git a/integration-tests/src/sdk_tests/confidential_asset_processor_tests.rs b/integration-tests/src/sdk_tests/confidential_asset_processor_tests.rs index 0f417706..71b99161 100644 --- a/integration-tests/src/sdk_tests/confidential_asset_processor_tests.rs +++ b/integration-tests/src/sdk_tests/confidential_asset_processor_tests.rs @@ -24,6 +24,8 @@ pub const CA_TXN_ROLLOVER: &[u8] = include_bytes!("test_transactions/confidential_asset/1005_ca_rollover.json"); pub const CA_TXN_NORMALIZE: &[u8] = include_bytes!("test_transactions/confidential_asset/1006_ca_normalize.json"); +pub const CA_TXN_KEY_ROTATE: &[u8] = + include_bytes!("test_transactions/confidential_asset/1007_ca_key_rotate.json"); // --------------------------------------------------------------------------- // Processor config helper @@ -68,8 +70,8 @@ pub fn setup_ca_processor_config( #[cfg(test)] mod sdk_confidential_asset_processor_tests { use super::{ - setup_ca_processor_config, CA_TXN_DEPOSIT, CA_TXN_NORMALIZE, CA_TXN_REGISTER, - CA_TXN_ROLLOVER, CA_TXN_TRANSFER, CA_TXN_WITHDRAW, + setup_ca_processor_config, CA_TXN_DEPOSIT, CA_TXN_KEY_ROTATE, CA_TXN_NORMALIZE, + CA_TXN_REGISTER, CA_TXN_ROLLOVER, CA_TXN_TRANSFER, CA_TXN_WITHDRAW, }; use crate::{ diff_test_helper::confidential_asset_processor::load_data, @@ -112,53 +114,9 @@ mod sdk_confidential_asset_processor_tests { process_single_ca_txn(CA_TXN_NORMALIZE, Some("ca_normalize".to_string())).await; } - /// Processes all six CA event types in a single batch and validates the - /// combined DB output. #[tokio::test(flavor = "multi_thread", worker_threads = 2)] - async fn test_ca_all_events() { - let (generate_flag, custom_output_path) = get_test_config(); - let output_path = custom_output_path.unwrap_or_else(|| DEFAULT_OUTPUT_FOLDER.to_string()); - - let txns = [ - CA_TXN_REGISTER, - CA_TXN_DEPOSIT, - CA_TXN_WITHDRAW, - CA_TXN_TRANSFER, - CA_TXN_ROLLOVER, - CA_TXN_NORMALIZE, - ]; - - let (db, mut test_context) = setup_test_environment(&txns).await; - let db_url = db.get_db_url(); - let (config, processor_name) = setup_ca_processor_config(&test_context, &db_url); - - let processor = ConfidentialAssetProcessor::new(config) - .await - .expect("Failed to create ConfidentialAssetProcessor"); - let test_case = Some("ca_all_events".to_string()); - - match run_processor_test( - &mut test_context, - processor, - load_data, - db_url, - generate_flag, - output_path.clone(), - test_case.clone(), - ) - .await - { - Ok(mut db_value) => { - let _ = validate_json( - &mut db_value, - test_context.get_request_start_version(), - processor_name, - output_path, - test_case, - ); - }, - Err(e) => panic!("test_ca_all_events failed: {e}"), - } + async fn test_ca_key_rotate() { + process_single_ca_txn(CA_TXN_KEY_ROTATE, Some("ca_key_rotate".to_string())).await; } // ----------------------------------------------------------------------- diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1001_ca_register.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1001_ca_register.json index 7fa81301..e9200797 100644 --- a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1001_ca_register.json +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1001_ca_register.json @@ -1,62 +1,261 @@ { - "timestamp": { "seconds": "1700000001", "nanos": 0 }, - "version": "1001", + "timestamp": { + "seconds": "1777278908", + "nanos": 139543000 + }, + "version": "4622", "info": { - "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "gasUsed": "500", + "hash": "VdgZddqh1lsaJ74qsU+bmLkG1pGrNKkxoTexz9grWR4=", + "stateChangeHash": "vLqJ3BKF+2aL8xLk+IxtwxmPcU4V0ulAVbKAB1R4vyg=", + "eventRootHash": "678DJjcqsKCZKOLIp/eQCYcykrpM8l3hjYUTcX0GtM0=", + "gasUsed": "1283", "success": true, "vmStatus": "Executed successfully", - "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "changes": [] + "accumulatorRootHash": "Tj4u9wDXaBqpAFI4qC/r3qXlRAX6QS9b4lqEZMnlu5g=", + "changes": [ + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"3407600\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x9bb809cb154a393546da38ff08bc927679e77ecdb59dab49029315b54644e40e\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7", + "stateKeyHash": "tpv2zewHu7VwzdyQ3+K3vtAXIP84U46OeyfXAQjAPS4=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"999822000\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7", + "stateKeyHash": "tpv2zewHu7VwzdyQ3+K3vtAXIP84U46OeyfXAQjAPS4=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x6ef206f0251d65315b4b024e4fdb421e40b4f932f442656aa24290e8d1f7e9a7", + "stateKeyHash": "qnnq+BXh6iD7PRvLRZ+dhgzSDa/cWbmkY718qV/mcHc=", + "type": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "ConfidentialAssetStore" + }, + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::ConfidentialAssetStore", + "data": "{\"actual_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"ek\":{\"point\":{\"data\":\"0x02bd8e95f31ca30e8e34d281cadf6c2cc3aafedce687cf7343b0dcea8d23da42\"}},\"frozen\":false,\"normalized\":true,\"pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"pending_counter\":\"0\"}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x6ef206f0251d65315b4b024e4fdb421e40b4f932f442656aa24290e8d1f7e9a7", + "stateKeyHash": "wKnLRE848xnM6KU4AVzRiZ+GFVUwEY7+2OPYd9A8Bvo=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":true,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x6ef206f0251d65315b4b024e4fdb421e40b4f932f442656aa24290e8d1f7e9a7\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "stateKeyHash": "9pi5SqyCeZSOIAveAFksN37ar2I4xzA4j3x35X1cpVQ=", + "type": { + "address": "0x1", + "module": "account", + "name": "Account" + }, + "typeStr": "0x1::account::Account", + "data": "{\"authentication_key\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"coin_register_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"creation_num\":\"0\"}}},\"guid_creation_num\":\"2\",\"key_rotation_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"creation_num\":\"1\"}}},\"rotation_capability_offer\":{\"for\":{\"vec\":[]}},\"sequence_number\":\"2\",\"signer_capability_offer\":{\"for\":{\"vec\":[]}}}" + } + } + ] }, - "epoch": "1", - "blockHeight": "1001", + "epoch": "90", + "blockHeight": "2308", "type": "TRANSACTION_TYPE_USER", - "sizeInfo": { - "transactionBytes": 100, - "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 150 }], - "writeOpSizeInfo": [] - }, "user": { "request": { - "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", - "sequenceNumber": "0", - "maxGasAmount": "100000", + "sender": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "sequenceNumber": "1", + "maxGasAmount": "2000000", "gasUnitPrice": "100", - "expirationTimestampSecs": { "seconds": "9999999999" }, + "expirationTimestampSecs": { + "seconds": "1777279508" + }, "payload": { "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", "entryFunctionPayload": { "function": { - "module": { "address": "0x1", "name": "confidential_asset" }, + "module": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "name": "confidential_asset" + }, "name": "register" }, - "typeArguments": [], - "arguments": [], - "entryFunctionIdStr": "0x1::confidential_asset::register" - } + "arguments": [ + "{\"inner\":\"0xa\"}", + "\"0x02bd8e95f31ca30e8e34d281cadf6c2cc3aafedce687cf7343b0dcea8d23da42\"", + "\"0x320fb3cca42c8eccb4830028058d1225c660737d065fb3c25a7c38f1ba283e73\"", + "\"0xd085ec45b4f474b15c797236bde62f869d669405d13529554e0ccb36e7ca860c\"" + ], + "entryFunctionIdStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::register" + }, + "extraConfigV1": {} }, "signature": { "type": "TYPE_ED25519", "ed25519": { - "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + "publicKey": "saPw/4UW16G4RS6SLgp8U/JxXjH2L2e86MlzDLWkIgg=", + "signature": "g1sTpVtQYCU8XvRt5SHrB9LAN8LRsHQlvvoq0zHTRvzmReCYYLfElcDQeWt6yduUGDlru/Bt1XP+ddA17hDMDw==" } } }, "events": [ { "key": { - "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + "accountAddress": "0x0" }, "type": { "type": "MOVE_TYPES_STRUCT", - "struct": { "address": "0x1", "module": "confidential_asset", "name": "Registered" } + "struct": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "Registered" + } + }, + "data": "{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"asset_type\":\"0xa\",\"ek\":{\"point\":{\"data\":\"0x02bd8e95f31ca30e8e34d281cadf6c2cc3aafedce687cf7343b0dcea8d23da42\"}}}", + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::Registered" + }, + { + "key": { + "accountAddress": "0x0" }, - "typeStr": "0x1::confidential_asset::Registered", - "data": "{\"addr\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"ek\":{\"point\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}}" + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Withdraw" + } + }, + "data": "{\"amount\":\"128300\",\"store\":\"0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7\"}", + "typeStr": "0x1::fungible_asset::Withdraw" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Deposit" + } + }, + "data": "{\"amount\":\"128300\",\"store\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\"}", + "typeStr": "0x1::fungible_asset::Deposit" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "transaction_fee", + "name": "FeeStatement" + } + }, + "data": "{\"execution_gas_units\":\"12\",\"io_gas_units\":\"3\",\"storage_fee_octas\":\"126880\",\"storage_fee_refund_octas\":\"0\",\"total_charge_gas_units\":\"1283\"}", + "typeStr": "0x1::transaction_fee::FeeStatement" + } + ] + }, + "sizeInfo": { + "transactionBytes": 363, + "eventSizeInfo": [ + { + "typeTagBytes": 64, + "totalBytes": 161 + }, + { + "typeTagBytes": 58, + "totalBytes": 98 + }, + { + "typeTagBytes": 57, + "totalBytes": 97 + }, + { + "typeTagBytes": 63, + "totalBytes": 103 + } + ], + "writeOpSizeInfo": [ + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 110, + "valueBytes": 837 + }, + { + "keyBytes": 87, + "valueBytes": 142 + }, + { + "keyBytes": 84, + "valueBytes": 147 } ] } diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1002_ca_deposit.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1002_ca_deposit.json index 6f478245..ab3338a3 100644 --- a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1002_ca_deposit.json +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1002_ca_deposit.json @@ -1,62 +1,312 @@ { - "timestamp": { "seconds": "1700000002", "nanos": 0 }, - "version": "1002", + "timestamp": { + "seconds": "1777278908", + "nanos": 415727000 + }, + "version": "4627", "info": { - "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB=", - "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB=", - "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB=", - "gasUsed": "500", + "hash": "v3bPempo9pBylZtEXsPfsk7Lr85Ost5j3+iqNmmQGAs=", + "stateChangeHash": "+JNGHlkMhg3VkoE9heeTnndr0rcGI/MOoPOWCirHNU8=", + "eventRootHash": "w0RQ3U+8nao4+NMqM1snaoWO/+igERWFXcpulQnEzuw=", + "gasUsed": "553", "success": true, "vmStatus": "Executed successfully", - "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB=", - "changes": [] + "accumulatorRootHash": "lDLcG9FjtDTYLkCKrDfSK5ovCQPjDpbYb1CIaexOD6U=", + "changes": [ + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"3462900\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x9bb809cb154a393546da38ff08bc927679e77ecdb59dab49029315b54644e40e\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7", + "stateKeyHash": "tpv2zewHu7VwzdyQ3+K3vtAXIP84U46OeyfXAQjAPS4=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"949766700\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7", + "stateKeyHash": "tpv2zewHu7VwzdyQ3+K3vtAXIP84U46OeyfXAQjAPS4=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x6ef206f0251d65315b4b024e4fdb421e40b4f932f442656aa24290e8d1f7e9a7", + "stateKeyHash": "qnnq+BXh6iD7PRvLRZ+dhgzSDa/cWbmkY718qV/mcHc=", + "type": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "ConfidentialAssetStore" + }, + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::ConfidentialAssetStore", + "data": "{\"actual_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"ek\":{\"point\":{\"data\":\"0x02bd8e95f31ca30e8e34d281cadf6c2cc3aafedce687cf7343b0dcea8d23da42\"}},\"frozen\":false,\"normalized\":true,\"pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x7af2072a5cd06e2969a0b5b0a204f32b4cdfa573e7d92bb5ae750778ac830d2a\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x3ecba725a17ef10c1d20c27a08640918a62196c19b07e5e0bbff237678fce873\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"pending_counter\":\"1\"}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "stateKeyHash": "9pi5SqyCeZSOIAveAFksN37ar2I4xzA4j3x35X1cpVQ=", + "type": { + "address": "0x1", + "module": "account", + "name": "Account" + }, + "typeStr": "0x1::account::Account", + "data": "{\"authentication_key\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"coin_register_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"creation_num\":\"0\"}}},\"guid_creation_num\":\"2\",\"key_rotation_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"creation_num\":\"1\"}}},\"rotation_capability_offer\":{\"for\":{\"vec\":[]}},\"sequence_number\":\"3\",\"signer_capability_offer\":{\"for\":{\"vec\":[]}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xf68895e58f8d5404b752504bfa8d4fa56f3aed1d5c13b704eb613a35262f055f", + "stateKeyHash": "pp7nxVDZCgqI/abc7fyWZvmt0vcdoIqVI5+wBlIqixg=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"50000000\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xf68895e58f8d5404b752504bfa8d4fa56f3aed1d5c13b704eb613a35262f055f", + "stateKeyHash": "pp7nxVDZCgqI/abc7fyWZvmt0vcdoIqVI5+wBlIqixg=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x6a57339d753a9dc0178d8e5c3d0f2cd32ff9d05620cc7e10f7a6256269f7a8d7\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0xf68895e58f8d5404b752504bfa8d4fa56f3aed1d5c13b704eb613a35262f055f\",\"creation_num\":\"1125899906842624\"}}}}" + } + } + ] }, - "epoch": "1", - "blockHeight": "1002", + "epoch": "90", + "blockHeight": "2310", "type": "TRANSACTION_TYPE_USER", - "sizeInfo": { - "transactionBytes": 100, - "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 200 }], - "writeOpSizeInfo": [] - }, "user": { "request": { - "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", - "sequenceNumber": "1", - "maxGasAmount": "100000", + "sender": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "sequenceNumber": "2", + "maxGasAmount": "2000000", "gasUnitPrice": "100", - "expirationTimestampSecs": { "seconds": "9999999999" }, + "expirationTimestampSecs": { + "seconds": "1777279508" + }, "payload": { "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", "entryFunctionPayload": { "function": { - "module": { "address": "0x1", "name": "confidential_asset" }, - "name": "deposit" + "module": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "name": "confidential_asset" + }, + "name": "deposit_to" }, - "typeArguments": [], - "arguments": [], - "entryFunctionIdStr": "0x1::confidential_asset::deposit" - } + "arguments": [ + "{\"inner\":\"0xa\"}", + "\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\"", + "\"50000000\"" + ], + "entryFunctionIdStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::deposit_to" + }, + "extraConfigV1": {} }, "signature": { "type": "TYPE_ED25519", "ed25519": { - "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + "publicKey": "saPw/4UW16G4RS6SLgp8U/JxXjH2L2e86MlzDLWkIgg=", + "signature": "dzOGsLYXE/anja+YZkxavxzycZWUBuag2W2DouImHVUtjdP5nFpEHzJS6aLcNU0v/lUtUtE6WWnmREFOY+xPAg==" } } }, "events": [ { "key": { - "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Withdraw" + } + }, + "data": "{\"amount\":\"50000000\",\"store\":\"0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7\"}", + "typeStr": "0x1::fungible_asset::Withdraw" + }, + { + "key": { + "accountAddress": "0x0" }, "type": { "type": "MOVE_TYPES_STRUCT", - "struct": { "address": "0x1", "module": "confidential_asset", "name": "Deposited" } + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Deposit" + } + }, + "data": "{\"amount\":\"50000000\",\"store\":\"0xf68895e58f8d5404b752504bfa8d4fa56f3aed1d5c13b704eb613a35262f055f\"}", + "typeStr": "0x1::fungible_asset::Deposit" + }, + { + "key": { + "accountAddress": "0x0" }, - "typeStr": "0x1::confidential_asset::Deposited", - "data": "{\"from\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"to\":\"0x2222222222222222222222222222222222222222222222222222222222222222\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"amount\":\"1000\",\"new_pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]}}" + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "Deposited" + } + }, + "data": "{\"amount\":\"50000000\",\"asset_type\":\"0xa\",\"from\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"new_pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x7af2072a5cd06e2969a0b5b0a204f32b4cdfa573e7d92bb5ae750778ac830d2a\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x3ecba725a17ef10c1d20c27a08640918a62196c19b07e5e0bbff237678fce873\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"to\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\"}", + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::Deposited" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Withdraw" + } + }, + "data": "{\"amount\":\"55300\",\"store\":\"0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7\"}", + "typeStr": "0x1::fungible_asset::Withdraw" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Deposit" + } + }, + "data": "{\"amount\":\"55300\",\"store\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\"}", + "typeStr": "0x1::fungible_asset::Deposit" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "transaction_fee", + "name": "FeeStatement" + } + }, + "data": "{\"execution_gas_units\":\"13\",\"io_gas_units\":\"8\",\"storage_fee_octas\":\"53240\",\"storage_fee_refund_octas\":\"0\",\"total_charge_gas_units\":\"553\"}", + "typeStr": "0x1::transaction_fee::FeeStatement" + } + ] + }, + "sizeInfo": { + "transactionBytes": 305, + "eventSizeInfo": [ + { + "typeTagBytes": 58, + "totalBytes": 98 + }, + { + "typeTagBytes": 57, + "totalBytes": 97 + }, + { + "typeTagBytes": 63, + "totalBytes": 432 + }, + { + "typeTagBytes": 58, + "totalBytes": 98 + }, + { + "typeTagBytes": 57, + "totalBytes": 97 + }, + { + "typeTagBytes": 63, + "totalBytes": 103 + } + ], + "writeOpSizeInfo": [ + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 110, + "valueBytes": 837 + }, + { + "keyBytes": 84, + "valueBytes": 147 + }, + { + "keyBytes": 87, + "valueBytes": 246 } ] } diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1003_ca_withdraw.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1003_ca_withdraw.json index a0d8985c..17a75bb7 100644 --- a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1003_ca_withdraw.json +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1003_ca_withdraw.json @@ -1,62 +1,360 @@ { - "timestamp": { "seconds": "1700000003", "nanos": 0 }, - "version": "1003", + "timestamp": { + "seconds": "1777278948", + "nanos": 294159000 + }, + "version": "5017", "info": { - "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC=", - "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC=", - "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC=", - "gasUsed": "500", + "hash": "JtUkkDuhWHFKp+H4nq7EkuGDS1VhHloLkw/lGvpXqpY=", + "stateChangeHash": "C0uTqgJZZFtYsLbHqxEl8XUuG15JD0YbKL8/GnajKyo=", + "eventRootHash": "oUt12dAOy7ZpsmqAJKg75jVaDq7n1y64X+deN6bSkpI=", + "gasUsed": "222", "success": true, "vmStatus": "Executed successfully", - "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC=", - "changes": [] + "accumulatorRootHash": "2pDE5yByq4HWp8kfJVsuGY86U0Qo0GTn/QsFlFKsm0A=", + "changes": [ + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"7301600\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x9bb809cb154a393546da38ff08bc927679e77ecdb59dab49029315b54644e40e\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x326ee0128903b21e005f414c338ad02503f3d7908ee12f665ef132f576651f32", + "stateKeyHash": "N3ma79oz7ydUSdC2T6MZLX8h365J/U7JfqPD+KAgGSQ=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"999818496\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x326ee0128903b21e005f414c338ad02503f3d7908ee12f665ef132f576651f32", + "stateKeyHash": "N3ma79oz7ydUSdC2T6MZLX8h365J/U7JfqPD+KAgGSQ=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x326ee0128903b21e005f414c338ad02503f3d7908ee12f665ef132f576651f32\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x3aab6bdf48fc89437ddfc8cc86cce90a7e6226a180c58032c6786fa8a8c1bb80", + "stateKeyHash": "49wS5DY9A0J8P9ut6uHgdBv7h4t+L6ugBB8fYjsVMKM=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"999928100\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x3aab6bdf48fc89437ddfc8cc86cce90a7e6226a180c58032c6786fa8a8c1bb80", + "stateKeyHash": "49wS5DY9A0J8P9ut6uHgdBv7h4t+L6ugBB8fYjsVMKM=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0xb9cdee13e05b16094de884631063e066d39183b9ec4677ef749b1983721292f8\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x3aab6bdf48fc89437ddfc8cc86cce90a7e6226a180c58032c6786fa8a8c1bb80\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c", + "stateKeyHash": "LjbStQfPlq4pjE6tyH0cw0fmIBNp9L5Rl4iAeg6t/mE=", + "type": { + "address": "0x1", + "module": "account", + "name": "Account" + }, + "typeStr": "0x1::account::Account", + "data": "{\"authentication_key\":\"0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c\",\"coin_register_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c\",\"creation_num\":\"0\"}}},\"guid_creation_num\":\"2\",\"key_rotation_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c\",\"creation_num\":\"1\"}}},\"rotation_capability_offer\":{\"for\":{\"vec\":[]}},\"sequence_number\":\"5\",\"signer_capability_offer\":{\"for\":{\"vec\":[]}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xc38bd13a624971c08006b594d26c611f6803b6ed82a86e092726327f4b5f0d0c", + "stateKeyHash": "4NrwY90hxXGpI99vmjV05La12FcFVv2PrQQ+V2Yu2Vs=", + "type": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "ConfidentialAssetStore" + }, + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::ConfidentialAssetStore", + "data": "{\"actual_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x940c973484a137eab680ee0dc14338d10899672eff466a6eef9cd7fc44335c10\"},\"right\":{\"data\":\"0x2ed7895ac513e625a471ca763f295c00f9e828747dac4c3f7ead7fa2625f7e0b\"}},{\"left\":{\"data\":\"0xdc4b23b15633c7197698a979561b5bba00cbe7c737309a7cf718f8348baf335b\"},\"right\":{\"data\":\"0x327366cb6bf400c47a1d54a513f0bc7fa2250c74f26846091897ec2c1c5f165e\"}},{\"left\":{\"data\":\"0x74db3b9edb4f3813a8eae9e87a1f5d2e2f7e87f5a78699a068099a27c1008b70\"},\"right\":{\"data\":\"0x9e0d2a4fa2fdf002104da5d2ab10cea262f9f855184ae156856ec105c0617f54\"}},{\"left\":{\"data\":\"0xa24c2e0ba6b7e2a3a0fb0f2e037798f9c94043f43d44360b9af03e8d952a3e5a\"},\"right\":{\"data\":\"0xda405fcb71236f3a4a44e1994a272de06dbb77861d30461c4a3cd14e0565d728\"}},{\"left\":{\"data\":\"0x7e92381f4f538ae6ffbf8e61a99406446b8a3d5312e552a639f4387ee595d11f\"},\"right\":{\"data\":\"0x804c8195c352878877d4fa482e4795dd120237acbf6c7fd3a56cb04c33fc6339\"}},{\"left\":{\"data\":\"0xf0999ae3182f720a5f5b19c6831096d909f60a745476cdb09232ca58a9cfb202\"},\"right\":{\"data\":\"0x4e3e3bbcda44b0742085462be8a555413df306b9fcdd955c4fe9ae2935b67519\"}},{\"left\":{\"data\":\"0x8c3766035b1dad8c369f9f5298cd90a37034bd60a75f8532856081e292e9b312\"},\"right\":{\"data\":\"0x70c386d83fa91a137d48aa4fa64d8b9dc9190e1df6bb5f37d96e33385443336e\"}},{\"left\":{\"data\":\"0xb41d9f8285b73abf0d932f493c734fdd210f6b9592554658fa3c286a1eb40258\"},\"right\":{\"data\":\"0x7674eaa4e41b927737edc5d6156558541434f8e9af1a15d7134baf5ceb91d72c\"}}]},\"ek\":{\"point\":{\"data\":\"0x54c4d9191043e7c9a3b2496a38f57e927732fa6c26f57b9bf43d26a8135c3f44\"}},\"frozen\":false,\"normalized\":true,\"pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"pending_counter\":\"0\"}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xf68895e58f8d5404b752504bfa8d4fa56f3aed1d5c13b704eb613a35262f055f", + "stateKeyHash": "pp7nxVDZCgqI/abc7fyWZvmt0vcdoIqVI5+wBlIqixg=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"100000064\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xf68895e58f8d5404b752504bfa8d4fa56f3aed1d5c13b704eb613a35262f055f", + "stateKeyHash": "pp7nxVDZCgqI/abc7fyWZvmt0vcdoIqVI5+wBlIqixg=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x6a57339d753a9dc0178d8e5c3d0f2cd32ff9d05620cc7e10f7a6256269f7a8d7\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0xf68895e58f8d5404b752504bfa8d4fa56f3aed1d5c13b704eb613a35262f055f\",\"creation_num\":\"1125899906842624\"}}}}" + } + } + ] }, - "epoch": "1", - "blockHeight": "1003", + "epoch": "91", + "blockHeight": "2466", "type": "TRANSACTION_TYPE_USER", - "sizeInfo": { - "transactionBytes": 100, - "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 200 }], - "writeOpSizeInfo": [] - }, "user": { "request": { - "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", - "sequenceNumber": "2", - "maxGasAmount": "100000", + "sender": "0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c", + "sequenceNumber": "4", + "maxGasAmount": "2000000", "gasUnitPrice": "100", - "expirationTimestampSecs": { "seconds": "9999999999" }, + "expirationTimestampSecs": { + "seconds": "1777279549" + }, "payload": { "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", "entryFunctionPayload": { "function": { - "module": { "address": "0x1", "name": "confidential_asset" }, - "name": "withdraw" + "module": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "name": "confidential_asset" + }, + "name": "withdraw_to" }, - "typeArguments": [], - "arguments": [], - "entryFunctionIdStr": "0x1::confidential_asset::withdraw" - } + "arguments": [ + "{\"inner\":\"0xa\"}", + "\"0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c\"", + "\"1\"", + "\"0x940c973484a137eab680ee0dc14338d10899672eff466a6eef9cd7fc44335c102ed7895ac513e625a471ca763f295c00f9e828747dac4c3f7ead7fa2625f7e0bdc4b23b15633c7197698a979561b5bba00cbe7c737309a7cf718f8348baf335b327366cb6bf400c47a1d54a513f0bc7fa2250c74f26846091897ec2c1c5f165e74db3b9edb4f3813a8eae9e87a1f5d2e2f7e87f5a78699a068099a27c1008b709e0d2a4fa2fdf002104da5d2ab10cea262f9f855184ae156856ec105c0617f54a24c2e0ba6b7e2a3a0fb0f2e037798f9c94043f43d44360b9af03e8d952a3e5ada405fcb71236f3a4a44e1994a272de06dbb77861d30461c4a3cd14e0565d7287e92381f4f538ae6ffbf8e61a99406446b8a3d5312e552a639f4387ee595d11f804c8195c352878877d4fa482e4795dd120237acbf6c7fd3a56cb04c33fc6339f0999ae3182f720a5f5b19c6831096d909f60a745476cdb09232ca58a9cfb2024e3e3bbcda44b0742085462be8a555413df306b9fcdd955c4fe9ae2935b675198c3766035b1dad8c369f9f5298cd90a37034bd60a75f8532856081e292e9b31270c386d83fa91a137d48aa4fa64d8b9dc9190e1df6bb5f37d96e33385443336eb41d9f8285b73abf0d932f493c734fdd210f6b9592554658fa3c286a1eb402587674eaa4e41b927737edc5d6156558541434f8e9af1a15d7134baf5ceb91d72c\"", + "\"0xea1df222cbb0164933be90bb87f39963b899a680f9ca2dad94ade81ec996d93bb8914c996a155053358573a1f40db5e9a904d7cc40aeb18ad368870486bb3a6a2a127732317fc4e7b45092b6c7a73f7165c31db344683c26eb07156a0fb9e57fdc0907fc676632f2fb9b1034f646c8e458783d49d76314f96fa2c54e2f369247e73b22d7ca7ea6dfc8746d8cca5dd8eefc7eedf97c5ecadb287643c1f43b150bdbbe5b975f2bf5a705b807da63bc3dac3d90efc1aff8f9b500068a7325d98a04ad6fc3a0b02f8429e75bc09aa2e3b4c23c4c6101bb9405c975be08d534a7f401248f0ae0bf55def067ca067dc30e87e2d862a053234a8c90022e55d547a13e272a7fa8199a1b6f1c4c3b844e79909922fbdade60e0f7e80514d65a91b5fcdc1596172bceeb68c80ab4c3b221aaee5b57b56e5cf834fb38e0ff7ea89507084f3e24441370c9845b99b563b14164515422545700886a95c51c6e5fbb5ebfdc0076a0e44c521efea7b5fee36f2c2001052ed50f9baded47bf81cb834ed8c5976c49bc77b0ea319549717c0ea6af88dbafddb4ed84ad4071ac3bd5ad6b3b5f2c4869a2786e836c3de40bcb1470ebe81ecea3fb75ac4febf5f6034be200aa0718893f2aeb52e2fb72f2e034162356e37d3b5b673704dd43f72c0a250de2f866c66234161f663dd12233b4e2955e36c2b4c2d0bb8d1baaaebe61ac895f32bd8639570ef44d38dc4345d8328b3e93d2807cda674da92c9a3c2740f1b6bd96e3cd64aa7ce2fb89351f4f5b1332e9444a6d3a9b537e31ade137eb863afb434ebaeae62d7018d0f4b8102954454eda68461d8deec2d3c3dc442ed4555b2d8fe705e7803237a2f5755da2f61f8b3981d5972d8eabd3ff681edaead349000c24f7eb60ec3f31401748f9f0202096e301315642ce7de695d2560396774e68f35792926fbfeb1424d84cc097d0d2b0eb8634a9baf3524ec8f9f0ca732c88eaa277e46ead742201034843f4bc62869b53bbd9f5fd17cbfd24f0fa28985fe5c27702bb3bd3bfed09\"", + "\"0xd9992f37a126a9d72bc2cc8c644c7057c6eefe950d68e34482171d0b9d11f004de3967b9c330e7c760748ebc15486621194e08afbed48fc4e43eefe4aa632301f18a20deeb966f22c9cdd3d274bb8ef0cf3199a9569347b7807a4ac5ffd4370592485595c5ad1361b4623f70dae3731d07dc8d37c5c5f975b1aa29080687ff0724ff07c6a5e5998120c7a403c2b4d6172ae2d1ba75efd0e28df07f20fbe08a092ac6dad6a8dbc76a9b2bca2aa43804d64a33f808005e3851a0f1b2f85aca65063fe7bcc9bb51e2d261ea290fcd4bdebc9844d137471c22fffc52d53eae658e0311ce9f6437bd203d2dfc9686295f2e8fbfa449478b6dd0da9df64cd8a9730405d50b22014526054a5d552bb9f77b22496bd2e3e0edc9304338ff6b2f138072097ca9bcb77197f7eb1219539381bfdf4b9edf1e22cf28b48ba19fcd759fb59a06076fdb9d8bf58680da5c6c20dfd28845f8c39bb3545c73b8d9f42be54e70de06eedf6a73d6e1c8d281c9b1e8f30c46e383f970f9adb842e27a6b4f64bef9230da46191bf2adfae558d3c504bed5bd6273ccb9ac9d9709cfba38de65680e26e0150791456a3c72e00bb46a744b6d25fc62b6faad1b3698bbbd6b16bbf5fb4c10eb36de7f7cdc4e269d7ff408198e2cca6e1143654144b02b9c7cca145020483008742ef21feefe822ffb72bd11f49b9395ed4f4418588933837fe25ea1e0e1904b0632565a593293dfd6fb1166d5c1f287560bba8caa8a056b5dc5a438e07fe05976cbe094bf54a43237893f8ed47ae7be5ad082f50aaf64f44c6aca63d39e3038c21feb4fc39debedbc4a3633378597f1edea8f03f39e1230f8ec3a0045d070228179ee9558f55eec9328619c9dbf3e8254f5b3af84b58e1e422ba536ceadb4daac2f9d5d9fc249555eca9ed8abc99ff9c631e38516b50bfae2f0a8527f27a1496022777dfe684371eb57ba3930d93d59a8543c3641b64bddc7c2a0b93421f0210ac2cd035cdfc9da08bef3d582028902f7f0ada603005c14495b2c26b65cf32a40f32361ee80c05ae54a24d900ffcd95e4f7bbc8bfc5adf0ea4c2df1ec8322a3a40de9fd7d26cc4e62fdf62c998dc2b23fe45d46563b09d5d9f8ac089078d1382b5db69a24c104c6fe5e100bd0d589f6a3af4a573584d01c671e2ce3a71ad307e048a960496d6a2f0ba882ab4d3338ca1f5454632d4e2899df5cd6540943408b8b7032610cf35cedf58a4c5d70747b26d31222c09dd0e9283c94bddc3bbd42e30d8739b5735c1bfc13e68cfd6f7bfd659ed4a2193a5596561c7d3e16b87d86fc6c0e9c214915c1348c4605c07c102d12cdca7e92f2cc4741cb997416c75e97646cf3dd66c3bab5726865a5fce4cd0a0ed57bd812d55efe23d67460d45d9017b20becf83afb569bb244e462df0649801043396e1fe0a95d1de90b06830c0050fc63b1944006b9665c4cd19f0917ed1c43abbb15b4363bdc158152a9192c8a44ec82cd5240ff1ac80c246213aafe6159fdb956f3bc0f3059671fbf74dff78c87334016546cc73095f4869e768f01eb6d41c375c4545ff34af0d9688faecef50509c820fea9863b21f29af129b8e42038bb06780a14676a2772076ec0726a6420e\"" + ], + "entryFunctionIdStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::withdraw_to" + }, + "extraConfigV1": {} }, "signature": { - "type": "TYPE_ED25519", - "ed25519": { - "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + "type": "TYPE_FEE_PAYER", + "feePayer": { + "sender": { + "type": "TYPE_ED25519", + "ed25519": { + "publicKey": "SDE1ziS7ycUXqHeRRqWmR05t9OpYAhJAwjuMvqskpxI=", + "signature": "GHGMP53dP4OhiG3SuQ0YYDs8vfPS0dKR+ZvJxM02KsqWriZFqLW+WNDovHA+lsG7VNkZd7gOfMQCHMTFYDU5Bg==" + } + }, + "feePayerAddress": "0xb9cdee13e05b16094de884631063e066d39183b9ec4677ef749b1983721292f8", + "feePayerSigner": { + "type": "TYPE_ED25519", + "ed25519": { + "publicKey": "Pl+JDDqqwv7KbbxZ0yEqMpf4jxMXv135mwrGl4hGgQk=", + "signature": "a+QY7qbITGmGW8qwQN3c4WZxgLDxzyOcNLGH/p7dwUv5FehHus64wYh0tjXmCiCK0Bf5EhvAxtkUBBpW4PCLCw==" + } + } } } }, "events": [ { "key": { - "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Withdraw" + } + }, + "data": "{\"amount\":\"1\",\"store\":\"0xf68895e58f8d5404b752504bfa8d4fa56f3aed1d5c13b704eb613a35262f055f\"}", + "typeStr": "0x1::fungible_asset::Withdraw" + }, + { + "key": { + "accountAddress": "0x0" }, "type": { "type": "MOVE_TYPES_STRUCT", - "struct": { "address": "0x1", "module": "confidential_asset", "name": "Withdrawn" } + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Deposit" + } }, - "typeStr": "0x1::confidential_asset::Withdrawn", - "data": "{\"from\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"to\":\"0x2222222222222222222222222222222222222222222222222222222222222222\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"amount\":\"500\",\"new_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]}}" + "data": "{\"amount\":\"1\",\"store\":\"0x326ee0128903b21e005f414c338ad02503f3d7908ee12f665ef132f576651f32\"}", + "typeStr": "0x1::fungible_asset::Deposit" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "Withdrawn" + } + }, + "data": "{\"amount\":\"1\",\"asset_type\":\"0xa\",\"from\":\"0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c\",\"new_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x940c973484a137eab680ee0dc14338d10899672eff466a6eef9cd7fc44335c10\"},\"right\":{\"data\":\"0x2ed7895ac513e625a471ca763f295c00f9e828747dac4c3f7ead7fa2625f7e0b\"}},{\"left\":{\"data\":\"0xdc4b23b15633c7197698a979561b5bba00cbe7c737309a7cf718f8348baf335b\"},\"right\":{\"data\":\"0x327366cb6bf400c47a1d54a513f0bc7fa2250c74f26846091897ec2c1c5f165e\"}},{\"left\":{\"data\":\"0x74db3b9edb4f3813a8eae9e87a1f5d2e2f7e87f5a78699a068099a27c1008b70\"},\"right\":{\"data\":\"0x9e0d2a4fa2fdf002104da5d2ab10cea262f9f855184ae156856ec105c0617f54\"}},{\"left\":{\"data\":\"0xa24c2e0ba6b7e2a3a0fb0f2e037798f9c94043f43d44360b9af03e8d952a3e5a\"},\"right\":{\"data\":\"0xda405fcb71236f3a4a44e1994a272de06dbb77861d30461c4a3cd14e0565d728\"}},{\"left\":{\"data\":\"0x7e92381f4f538ae6ffbf8e61a99406446b8a3d5312e552a639f4387ee595d11f\"},\"right\":{\"data\":\"0x804c8195c352878877d4fa482e4795dd120237acbf6c7fd3a56cb04c33fc6339\"}},{\"left\":{\"data\":\"0xf0999ae3182f720a5f5b19c6831096d909f60a745476cdb09232ca58a9cfb202\"},\"right\":{\"data\":\"0x4e3e3bbcda44b0742085462be8a555413df306b9fcdd955c4fe9ae2935b67519\"}},{\"left\":{\"data\":\"0x8c3766035b1dad8c369f9f5298cd90a37034bd60a75f8532856081e292e9b312\"},\"right\":{\"data\":\"0x70c386d83fa91a137d48aa4fa64d8b9dc9190e1df6bb5f37d96e33385443336e\"}},{\"left\":{\"data\":\"0xb41d9f8285b73abf0d932f493c734fdd210f6b9592554658fa3c286a1eb40258\"},\"right\":{\"data\":\"0x7674eaa4e41b927737edc5d6156558541434f8e9af1a15d7134baf5ceb91d72c\"}}]},\"to\":\"0xbe3decc9224454163f8a371f3b32282321d87eeffb7612c629c4b49ef0d2e84c\"}", + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::Withdrawn" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Withdraw" + } + }, + "data": "{\"amount\":\"22200\",\"store\":\"0x3aab6bdf48fc89437ddfc8cc86cce90a7e6226a180c58032c6786fa8a8c1bb80\"}", + "typeStr": "0x1::fungible_asset::Withdraw" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Deposit" + } + }, + "data": "{\"amount\":\"22200\",\"store\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\"}", + "typeStr": "0x1::fungible_asset::Deposit" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "transaction_fee", + "name": "FeeStatement" + } + }, + "data": "{\"execution_gas_units\":\"213\",\"io_gas_units\":\"9\",\"storage_fee_octas\":\"0\",\"storage_fee_refund_octas\":\"0\",\"total_charge_gas_units\":\"222\"}", + "typeStr": "0x1::transaction_fee::FeeStatement" + } + ] + }, + "sizeInfo": { + "transactionBytes": 2852, + "eventSizeInfo": [ + { + "typeTagBytes": 58, + "totalBytes": 98 + }, + { + "typeTagBytes": 57, + "totalBytes": 97 + }, + { + "typeTagBytes": 63, + "totalBytes": 696 + }, + { + "typeTagBytes": 58, + "totalBytes": 98 + }, + { + "typeTagBytes": 57, + "totalBytes": 97 + }, + { + "typeTagBytes": 63, + "totalBytes": 103 + } + ], + "writeOpSizeInfo": [ + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 84, + "valueBytes": 147 + }, + { + "keyBytes": 110, + "valueBytes": 837 + }, + { + "keyBytes": 87, + "valueBytes": 246 } ] } diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1004_ca_transfer.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1004_ca_transfer.json index a9e445c1..1e521edd 100644 --- a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1004_ca_transfer.json +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1004_ca_transfer.json @@ -1,62 +1,250 @@ { - "timestamp": { "seconds": "1700000004", "nanos": 0 }, - "version": "1004", + "timestamp": { + "seconds": "1777278935", + "nanos": 779028000 + }, + "version": "4917", "info": { - "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD=", - "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD=", - "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD=", - "gasUsed": "500", + "hash": "ebiqykciWF38MLJ3gJULVV4mrpDq6l1uns6QlyHYWHI=", + "stateChangeHash": "5C+t30c/Y5PRLDHTaICHZ2gvVlG1h1qxNTeVPEcc94A=", + "eventRootHash": "p6PZvlef196WEH/KxAOjMrqGrnTAk+Tt1SrMTuiM5T0=", + "gasUsed": "349", "success": true, "vmStatus": "Executed successfully", - "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD=", - "changes": [] + "accumulatorRootHash": "kebjRnJX2i51D4EhRCRxbiUobEPCp/EI6lEU77/hakE=", + "changes": [ + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x468a87e4c9c15d6f2056d5d8e61e6dcf3c69cd90f7ce5fef2dcd0962731fbef", + "stateKeyHash": "ntcQ+x6oNASdz0PQsgZacU+/zp5KmyyHGwjIpuBCqg8=", + "type": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "ConfidentialAssetStore" + }, + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::ConfidentialAssetStore", + "data": "{\"actual_balance\":{\"chunks\":[{\"left\":{\"data\":\"0xb27ce0857bf821841eacba87617d7168faf3949613727f0f658bf7024b129a7d\"},\"right\":{\"data\":\"0xa07d34405842876a94e44ee060518df2969a64037f58afd1889524914e40a21b\"}},{\"left\":{\"data\":\"0x60eec74a6958f5845b55d83b149e84353b46be08ec6e45523548ff8647dae540\"},\"right\":{\"data\":\"0x68d72b582ec7134c6221c4244c32a4fa627a9f8231678c99c0c7d2adc38b4308\"}},{\"left\":{\"data\":\"0x0087c488322548f53203076a304c7dbec8021b9232f3cd1e04fa2bedcae79e37\"},\"right\":{\"data\":\"0xb8f7b1d57ee8c6a3bd536b3bb30eb752a41812bf4248af5376f7ce843724dc69\"}},{\"left\":{\"data\":\"0xf04a18dd9cb22742164b51656227a8b7256d8d1fa31d81995f9a88b3702d4f67\"},\"right\":{\"data\":\"0x92d5fc1bb038e044d6f011f0b3a5946ff35802de94e160aff20fab7fb3630343\"}},{\"left\":{\"data\":\"0x66f3d9547d729f3b352eb4a0c4f2847210c474d7dd47953cbce4616f2da6844d\"},\"right\":{\"data\":\"0xf285787ca748c1d00f8e3e46b46ea5a8037197e35f41c12553788ec2f4c4dd57\"}},{\"left\":{\"data\":\"0xb84196c66229b5e5b4a3a1b085bd128b569e13f7b975f97f458984bdd61f063d\"},\"right\":{\"data\":\"0xa80d8940ce677379b12e1fc70373baded34a18fc383a856dc7f65da11d499e66\"}},{\"left\":{\"data\":\"0x6ed1004acbde6b59f702892dde2e08bdf4b21e39315c3faebac3eab33c1ab26a\"},\"right\":{\"data\":\"0x5633f629d24a56994311f4d7ad7e4c50b7f57a21235525b6fa1a566c0946f067\"}},{\"left\":{\"data\":\"0x6616db4046c8a3050cd4fe68633491e10eed574a48c783f76f379ea57b9ee059\"},\"right\":{\"data\":\"0xa869cdff01aa527a2c965f8e447544c4a3e2f87b852222872e941f3395f6c152\"}}]},\"ek\":{\"point\":{\"data\":\"0x78f1892b4d32ea28dd8458ac01435184afbc4d1d04aafe22d11c60b43412997a\"}},\"frozen\":false,\"normalized\":true,\"pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0xa6d9c2788c87535dcf51c85eda837b161c71a35d90ca9b44819033f943b96a4f\"},\"right\":{\"data\":\"0xd46db6e17717ee5ba05807ebe09ec3889741a61a37fdb841fc66f6056303ca50\"}},{\"left\":{\"data\":\"0x5ee9799db35dfd26c0704b647c428ea67e25cb56cd706ce959263c02dcfaf624\"},\"right\":{\"data\":\"0x90dc38fbd63dcd06fdd53ce1f630562a77f62be51bc1e57f0236720396e27c12\"}},{\"left\":{\"data\":\"0x464fbd2581bf6a961cfae713919d839ecc691b40b0bf2f194329b872983f3a18\"},\"right\":{\"data\":\"0x14291a03dd87c6fd1bd1322f70ec0a7d8648ed3548608a79ab30607074057648\"}},{\"left\":{\"data\":\"0x061d2480b947fa5015b8b12129352504d8f8d98b8eafb404763726741ba56e77\"},\"right\":{\"data\":\"0x7c7e39d3d99d0e39b9b319635f5e64cd6060d1c0ab3cc4650699829bec8d4208\"}}]},\"pending_counter\":\"1\"}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"6393300\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x9bb809cb154a393546da38ff08bc927679e77ecdb59dab49029315b54644e40e\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954", + "stateKeyHash": "l6he+O1/It1djM6hLJMIS8ZnLY1ADDyjduT84Gapdg0=", + "type": { + "address": "0x1", + "module": "account", + "name": "Account" + }, + "typeStr": "0x1::account::Account", + "data": "{\"authentication_key\":\"0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954\",\"coin_register_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954\",\"creation_num\":\"0\"}}},\"guid_creation_num\":\"2\",\"key_rotation_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954\",\"creation_num\":\"1\"}}},\"rotation_capability_offer\":{\"for\":{\"vec\":[]}},\"sequence_number\":\"5\",\"signer_capability_offer\":{\"for\":{\"vec\":[]}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xf72f31f90d89676e049051c4277171375df66ec7dbcf8f539c75d733b3aa26e9", + "stateKeyHash": "LNwjaiK/riA/GOsplMwe/tdveAGmZVWXtN6G9zpDdyk=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"999783595\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xf72f31f90d89676e049051c4277171375df66ec7dbcf8f539c75d733b3aa26e9", + "stateKeyHash": "LNwjaiK/riA/GOsplMwe/tdveAGmZVWXtN6G9zpDdyk=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0xf72f31f90d89676e049051c4277171375df66ec7dbcf8f539c75d733b3aa26e9\",\"creation_num\":\"1125899906842624\"}}}}" + } + } + ] }, - "epoch": "1", - "blockHeight": "1004", + "epoch": "90", + "blockHeight": "2426", "type": "TRANSACTION_TYPE_USER", - "sizeInfo": { - "transactionBytes": 100, - "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 500 }], - "writeOpSizeInfo": [] - }, "user": { "request": { - "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", - "sequenceNumber": "3", - "maxGasAmount": "100000", + "sender": "0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954", + "sequenceNumber": "4", + "maxGasAmount": "2000000", "gasUnitPrice": "100", - "expirationTimestampSecs": { "seconds": "9999999999" }, + "expirationTimestampSecs": { + "seconds": "1777279536" + }, "payload": { "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", "entryFunctionPayload": { "function": { - "module": { "address": "0x1", "name": "confidential_asset" }, + "module": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "name": "confidential_asset" + }, "name": "confidential_transfer" }, - "typeArguments": [], - "arguments": [], - "entryFunctionIdStr": "0x1::confidential_asset::confidential_transfer" - } + "arguments": [ + "{\"inner\":\"0xa\"}", + "\"0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954\"", + "\"0xb27ce0857bf821841eacba87617d7168faf3949613727f0f658bf7024b129a7da07d34405842876a94e44ee060518df2969a64037f58afd1889524914e40a21b60eec74a6958f5845b55d83b149e84353b46be08ec6e45523548ff8647dae54068d72b582ec7134c6221c4244c32a4fa627a9f8231678c99c0c7d2adc38b43080087c488322548f53203076a304c7dbec8021b9232f3cd1e04fa2bedcae79e37b8f7b1d57ee8c6a3bd536b3bb30eb752a41812bf4248af5376f7ce843724dc69f04a18dd9cb22742164b51656227a8b7256d8d1fa31d81995f9a88b3702d4f6792d5fc1bb038e044d6f011f0b3a5946ff35802de94e160aff20fab7fb363034366f3d9547d729f3b352eb4a0c4f2847210c474d7dd47953cbce4616f2da6844df285787ca748c1d00f8e3e46b46ea5a8037197e35f41c12553788ec2f4c4dd57b84196c66229b5e5b4a3a1b085bd128b569e13f7b975f97f458984bdd61f063da80d8940ce677379b12e1fc70373baded34a18fc383a856dc7f65da11d499e666ed1004acbde6b59f702892dde2e08bdf4b21e39315c3faebac3eab33c1ab26a5633f629d24a56994311f4d7ad7e4c50b7f57a21235525b6fa1a566c0946f0676616db4046c8a3050cd4fe68633491e10eed574a48c783f76f379ea57b9ee059a869cdff01aa527a2c965f8e447544c4a3e2f87b852222872e941f3395f6c152\"", + "\"0xa6d9c2788c87535dcf51c85eda837b161c71a35d90ca9b44819033f943b96a4fd46db6e17717ee5ba05807ebe09ec3889741a61a37fdb841fc66f6056303ca505ee9799db35dfd26c0704b647c428ea67e25cb56cd706ce959263c02dcfaf62490dc38fbd63dcd06fdd53ce1f630562a77f62be51bc1e57f0236720396e27c12464fbd2581bf6a961cfae713919d839ecc691b40b0bf2f194329b872983f3a1814291a03dd87c6fd1bd1322f70ec0a7d8648ed3548608a79ab30607074057648061d2480b947fa5015b8b12129352504d8f8d98b8eafb404763726741ba56e777c7e39d3d99d0e39b9b319635f5e64cd6060d1c0ab3cc4650699829bec8d4208\"", + "\"0xa6d9c2788c87535dcf51c85eda837b161c71a35d90ca9b44819033f943b96a4fd46db6e17717ee5ba05807ebe09ec3889741a61a37fdb841fc66f6056303ca505ee9799db35dfd26c0704b647c428ea67e25cb56cd706ce959263c02dcfaf62490dc38fbd63dcd06fdd53ce1f630562a77f62be51bc1e57f0236720396e27c12464fbd2581bf6a961cfae713919d839ecc691b40b0bf2f194329b872983f3a1814291a03dd87c6fd1bd1322f70ec0a7d8648ed3548608a79ab30607074057648061d2480b947fa5015b8b12129352504d8f8d98b8eafb404763726741ba56e777c7e39d3d99d0e39b9b319635f5e64cd6060d1c0ab3cc4650699829bec8d4208\"", + "\"0x\"", + "\"0x\"", + "\"0x4ccdee05c707c3139208fe915396cb34813fc96725de1feb625f9c7c434cb473b01c2bf96b1bceee67ec91b9d01b357c25ff28ef5b31b99e439e45bcc7aae74dc2948c3be99fe4de62acac876a483f7f7975bd9751fe3702d4b8c8c1c8094f0bdeb75e3cca9e87a90b893b12723794ceee752da998217b3977629f1c5fdd313a44be305f1d142ec5cfcac08d4d43d4f3de62b147179a3591cc7f74bfc743ed066006e3e89674a72f65574fb77daa69e04896e03a0ffe1608c978f2a9bfa7f103d51b4a92c8a648e80eead62d6964f3411cbbe3a49271e0fb53d04e35b514b508061fe9b978272102546c167bd1f0d22bbe44e46b393420fcbc2c85482f24a31cd21161121b7892130f79293811b688315251801e243a2abcbb23a220f24c883574c207af7eff5942cad69509d60c7a7b7c4a6897f095cd51ab561f7b61b7597a2a062d70be54d947c9938dc0d499030e61206d4060fda65ffabf7e0a7a15c528207e242cf30f7cf93dd4b668981c7f26523049da64c516afbf4a3f667b8e0a2628e8aa59dc947f649820498d3afd77d5b871a44b0ee539888372258960cd285d08f89609c2eebeb550f09fa2f4a847010f6687bb5b6d7957de0220e396b8372fae7c25122f96b62afaee24907d80121b71233520bb604f93366d2d4cb9d47d6b10cd15a8c2fad900255fc90ef24cd2703b23a2053a448c8b3206018cf0b4f0342e57030d96c943623605119f250d8d4789c21e75cebf14f077760cd025005d6d94224161493b4ac6f38091a555c2af440dfc51d005179024dc95aa2379f147598e561b029b403e507ebc06d7878dbf21f7a02e509d19be31e07152fcc9de411e22e101c4f0060ee7e80e92b3986422e79d5bae7426daf620d3c174eae3378d20ea0d74c0c7eee9e102d18fb2bc3c47d69ef724ee7d47c8eadb64034ce495ef1215139699e83b91230efdc4a0e5ee970c0f71b1a214f740321a5aa2f049cacd0c168032bb3f6d85670c666d6c2c52136fbe182cc5b00bd676f5c5a6c6950ac005\"", + "\"0xfee5048b3f589b8a749ac0ee356a239f0ee9979c952e3406c964f2bea908a35c103ddfda65b17f05530527272d2f8f19f2159cd12211cd5bfc347f41d4cb4c671e1ff07c108e5ff27c3295ea54b6d3253cdc3a8c75d3660aadd5e04707f95a5a0422314635b8598e536976eaad9f759491a547e28b6594288c51340d57f86777b1fdd98d1632591a419fb1fbc8737aeb78247f79f9108385c6b5f4bdde6ef305a1c235f5aea2150c520b45f835299cbc87e18fe32f8621b80113bc065658350b33b5a72b77ceda50dcc5623c66a19963c94beca96edf70277ba11a4fcdf8550158d3e5c778a560900b2b525e370b372d38d9481434b894b8cfca82d56b7a3153949f5369f1dfddef6ed1f1e6e194c24a442514c6355afbeabca1e24b4e9b7a0c0a3586a91448395d7c012fc5e2b4e14bb6c0b07ff166fdf70e9a91856828a52ca60873ae385729e0775dcf40d752955e4b448ef504e26e31c8b5323a20726a22a43c446f9757b3dd4d9ca72a8dd6ca1d76e4c2b83b7ad5179d596196c7f2c81f74dc494c7afcd745b7d1ea8ce11f995741d1fc3441d0aa42bf7666015a5aab3a109fbec1152d736bfb72e412d2d883ed93b96a4113b065a028e961f41894557064402b21feaa3d9f7279a26838726e41a4728548131bea9b2d4a1cdfc71cbb65766afc96a750ed7c6e8b80706db5389739b71597d33393564333a7fdabdb7f1de23e1709de6b8936bcdd4b4f5adb20b076100edf08ac4e38acb4dd892f814e345011c03bed2a55bdb0660b5933ec00b5c2be50476ccf843506ae386a4d9ec05486b3041b37f7e2eeaeebc18a69de98ea37bb802fa5e04d0efd0a717cbb4a8b6f323adea6fd82f5f4a8654276b75ddcb55861369d79889433e65b5fed9546d50d8c64e4ff30e5005b68ff91da838686b597733760f95087e470de0c5bf6f6f304\"", + "\"0x6fd66d03f25c655db45db392beeea40702fec9088985549f86b4d1e2efec500093b8dce85e1c0eafb28f24cb0b99d33baf9c4c34cc0a54de1e4a0c91588d000e42350a5aae8a23ece05e3d07d77d1db944658db430e841cb65ba6ab0f3db290f85be19c28e40b9f8c4e4bd4203a7e642e3f7cde873273eb0dc7a7b67c97f6e0ac62c60c8550cb79866d32a676c52620d54c78b9365e5a94adeec84e9d07199017a3a0500512dc14b3241fb8bb0e5a2aaec298e70b4f695928bc844513a8bdd0dd15158621a31bb6703a6ad6d4c8d173a1b0bab442778fb624f623acb879ad00ce61b551695ceec8670daf9a21901ea7a33277be69343b29334b49c066b098c07c79507d6efa106110a1bb92f00416e3a8f7ccbc5bc04a169c6dbfd459325ef0b008804c936cd141f8e60383efac3daced7fa77455cda50a59399adee94f1a009e824911aa777f2a96175b7b9dc53db7c1ae67b28fd0b54f30871771fb1464c0abf63af55e5650fdec7f3bea9b52c3c0e853168adb5af3e7300279d18b7c6a1050793c6b5872aab4024aa2946ee23eacfa09f53dce2dad4a120847b244f50770c911a62a3b16e458eddcab59864aaeaf26560b55f48add9af13d538a55c1f4508a43e29034e5406ae1bdcdfaf09e2463cb79b9d759db23030f42769f5c15c6b0d77f79acd044680b15a2fd1775fc304112fa2c755a430844436dd575e1632400c4c8cd4bda8e4d306b42cac590285bdf71e8994ec764d010884bdd93401484f0431f1f44cd8f0fdba393276343d9a927acbde2d878777a7727994e539dd307009ad1ae1ee4e3194a8af5c5c9dc67e2f3c70793f2d8e6d035ac65286d360f9ae03b83cf58037cbdaa55f11be0936fcb48265a9a224f4eeb3910f6dffa610841f029072c27c3b42888a9cc96de1731d27737c9829647ce21fb978b29f863eac170a405597a5f123552eb31e1efde4d06e20fe763f1f01b531cb99a511118737d706b28f7c07f43933920774fe7be0f1c4e7b915bdbc30de7077ae95f3ce65364506287ac05d941b3b4fe9fca3734fac4bb69eb09aca6c40c118950d6926aa97d70210be29a40ca61bae5001b71c0a9ecadc95b9572cb549eb0fbba6cc327e005c06675388d3c74cdaec026bdf5a22d6179c29db36776388e7e2f90a0bccae7bbb03cc18ded02f8f82eb32809c221e0a71c4e265b9655679463a1f5f7fe97ede5d155837a8634255346010bd16b14e5b24c559abfe5818849e583a99c342f2484f07149e958443a6eff7351d09e7d80be648831d1c81d621a626855dbd2042222c66748500ff28a9225e34dc82e077563ecceb31ecc50b35b13b1182bc23e2ff5d1a941cbefa7bd1e33517eded35094c6eed93c75459ff6dd2ccdde75ea7e8e2711e7e043f0cbbf35744b08854091a5aa5c458e223471d7844b8e7dd8c6edd55b04d90f3bb64d95a11aaaa79291f24fbc5409460e9d065b47e806ec81ebd182f9f7ea2dbaa79eb1cd1a8831dd4258c2cdeb6147a2b755e48ebfcad653319c5b3d847668b6f7038023ad4e0514968a830e54fe2ec226ad266b9a248c71e3515661f238a47d550042a732b443f7c717baad486cb7f5788154a3c3c3519b49fc0c612757c06180be0591a9af6f6a5ea840f17229ac5803cfe0e89fea4f5f50294b2640f26b358d08c2185632d72586ea20380ef76a28942cc90eb237b8c71b5d837a106fcb9fe3fb1a5a1565116d76cad27f477e2a293dcfd1efe807770002e0c4578759aa79947b1f9df971f1ebd316048829824ad7bccc5a1dc3bb54b9d0fe736417cd4658937a58b3c0694441e1c2f2aecec8e64381ccb24feff89069d28287e42365667488087d64d6a8db177a3480afde0595440033900788c77af01cb68486d3584d68bf416433ddf002bd5cd8e5df437b7617314bc06edac5f8cc332f5b61d3296a4e5220fcc932d7a4747f3af0ec3e16bfee94ca58d8bf6c24977256d423530de5d937cb2af161119e079020931e688d0c1f6afe173d040edb78e1902539e63f65fc6c4db930854d2326a2581af871c027e4906f6f7b7ec720bad9ac9c74b001249ae061e30f85dc30edf5aef85288f271c68d5d73ed39c3463ad0bc14aa177ca80cae13e00d2eb1e13d2a9d265eb8ca32b1dd7d8be7b2aee7ffd0c7365133b4a34ff14ce875264da3197281b06a816fad6c30266baae8a37022027fed7056f2a78e630964dc7da864675cc42da810e081d6a30b96f569bc36ac29f7d1166538a36a8ccec90aaba5b9cef2840046a38f86fc80151df9691039a2684b79e3065523ddae77369159f1bd9babcf9bfa63bc3092d6793a7d4abdc33ab98c4f4bd5b8a47d550042a732b443f7c717baad486cb7f5788154a3c3c3519b49fc0c612757c06180be0591a9af6f6a5ea840f17229ac5803cfe0e89fea4f5f50294b2640f26b358d08c2185632d72586ea20380ef76a28942cc90eb237b8c71b5d837a106fcb9fe3fb1a5a1565116d76cad27f477e2a293dcfd1efe807770002e0c457875\"", + "\"0x\"" + ], + "entryFunctionIdStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::confidential_transfer" + }, + "extraConfigV1": {} }, "signature": { "type": "TYPE_ED25519", "ed25519": { - "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + "publicKey": "YRE4cA02Uw2R4Qg6HXbShCsoky6WEeA8ni21lwmWzhI=", + "signature": "0Lml7DVU/1clsnRnPRp6kc9KUbzwd3zZ0Xjypp+pa3jLKMDR63KUpVs6JxrWuv1qlf+w6ruWqsdMf9llTu6eAA==" } } }, "events": [ { "key": { - "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + "accountAddress": "0x0" }, "type": { "type": "MOVE_TYPES_STRUCT", - "struct": { "address": "0x1", "module": "confidential_asset", "name": "Transferred" } + "struct": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "Transferred" + } }, - "typeStr": "0x1::confidential_asset::Transferred", - "data": "{\"from\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"to\":\"0x2222222222222222222222222222222222222222222222222222222222222222\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"amount\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"ek_volun_auds\":\"0x\",\"sender_auditor_hint\":\"0x\",\"new_sender_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"new_recip_pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"memo\":\"0x\"}" + "data": "{\"amount\":{\"chunks\":[{\"left\":{\"data\":\"0xa6d9c2788c87535dcf51c85eda837b161c71a35d90ca9b44819033f943b96a4f\"},\"right\":{\"data\":\"0xd46db6e17717ee5ba05807ebe09ec3889741a61a37fdb841fc66f6056303ca50\"}},{\"left\":{\"data\":\"0x5ee9799db35dfd26c0704b647c428ea67e25cb56cd706ce959263c02dcfaf624\"},\"right\":{\"data\":\"0x90dc38fbd63dcd06fdd53ce1f630562a77f62be51bc1e57f0236720396e27c12\"}},{\"left\":{\"data\":\"0x464fbd2581bf6a961cfae713919d839ecc691b40b0bf2f194329b872983f3a18\"},\"right\":{\"data\":\"0x14291a03dd87c6fd1bd1322f70ec0a7d8648ed3548608a79ab30607074057648\"}},{\"left\":{\"data\":\"0x061d2480b947fa5015b8b12129352504d8f8d98b8eafb404763726741ba56e77\"},\"right\":{\"data\":\"0x7c7e39d3d99d0e39b9b319635f5e64cd6060d1c0ab3cc4650699829bec8d4208\"}}]},\"asset_type\":\"0xa\",\"ek_volun_auds\":\"0x\",\"from\":\"0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954\",\"memo\":\"0x\",\"new_recip_pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0xa6d9c2788c87535dcf51c85eda837b161c71a35d90ca9b44819033f943b96a4f\"},\"right\":{\"data\":\"0xd46db6e17717ee5ba05807ebe09ec3889741a61a37fdb841fc66f6056303ca50\"}},{\"left\":{\"data\":\"0x5ee9799db35dfd26c0704b647c428ea67e25cb56cd706ce959263c02dcfaf624\"},\"right\":{\"data\":\"0x90dc38fbd63dcd06fdd53ce1f630562a77f62be51bc1e57f0236720396e27c12\"}},{\"left\":{\"data\":\"0x464fbd2581bf6a961cfae713919d839ecc691b40b0bf2f194329b872983f3a18\"},\"right\":{\"data\":\"0x14291a03dd87c6fd1bd1322f70ec0a7d8648ed3548608a79ab30607074057648\"}},{\"left\":{\"data\":\"0x061d2480b947fa5015b8b12129352504d8f8d98b8eafb404763726741ba56e77\"},\"right\":{\"data\":\"0x7c7e39d3d99d0e39b9b319635f5e64cd6060d1c0ab3cc4650699829bec8d4208\"}}]},\"new_sender_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0xb27ce0857bf821841eacba87617d7168faf3949613727f0f658bf7024b129a7d\"},\"right\":{\"data\":\"0xa07d34405842876a94e44ee060518df2969a64037f58afd1889524914e40a21b\"}},{\"left\":{\"data\":\"0x60eec74a6958f5845b55d83b149e84353b46be08ec6e45523548ff8647dae540\"},\"right\":{\"data\":\"0x68d72b582ec7134c6221c4244c32a4fa627a9f8231678c99c0c7d2adc38b4308\"}},{\"left\":{\"data\":\"0x0087c488322548f53203076a304c7dbec8021b9232f3cd1e04fa2bedcae79e37\"},\"right\":{\"data\":\"0xb8f7b1d57ee8c6a3bd536b3bb30eb752a41812bf4248af5376f7ce843724dc69\"}},{\"left\":{\"data\":\"0xf04a18dd9cb22742164b51656227a8b7256d8d1fa31d81995f9a88b3702d4f67\"},\"right\":{\"data\":\"0x92d5fc1bb038e044d6f011f0b3a5946ff35802de94e160aff20fab7fb3630343\"}},{\"left\":{\"data\":\"0x66f3d9547d729f3b352eb4a0c4f2847210c474d7dd47953cbce4616f2da6844d\"},\"right\":{\"data\":\"0xf285787ca748c1d00f8e3e46b46ea5a8037197e35f41c12553788ec2f4c4dd57\"}},{\"left\":{\"data\":\"0xb84196c66229b5e5b4a3a1b085bd128b569e13f7b975f97f458984bdd61f063d\"},\"right\":{\"data\":\"0xa80d8940ce677379b12e1fc70373baded34a18fc383a856dc7f65da11d499e66\"}},{\"left\":{\"data\":\"0x6ed1004acbde6b59f702892dde2e08bdf4b21e39315c3faebac3eab33c1ab26a\"},\"right\":{\"data\":\"0x5633f629d24a56994311f4d7ad7e4c50b7f57a21235525b6fa1a566c0946f067\"}},{\"left\":{\"data\":\"0x6616db4046c8a3050cd4fe68633491e10eed574a48c783f76f379ea57b9ee059\"},\"right\":{\"data\":\"0xa869cdff01aa527a2c965f8e447544c4a3e2f87b852222872e941f3395f6c152\"}}]},\"sender_auditor_hint\":\"0x\",\"to\":\"0xa1597c3f7af36ba1ec2e4e761b0e8c30423bd160bd377bbe5699a35d0db6d954\"}", + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::Transferred" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Withdraw" + } + }, + "data": "{\"amount\":\"34900\",\"store\":\"0xf72f31f90d89676e049051c4277171375df66ec7dbcf8f539c75d733b3aa26e9\"}", + "typeStr": "0x1::fungible_asset::Withdraw" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Deposit" + } + }, + "data": "{\"amount\":\"34900\",\"store\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\"}", + "typeStr": "0x1::fungible_asset::Deposit" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "transaction_fee", + "name": "FeeStatement" + } + }, + "data": "{\"execution_gas_units\":\"344\",\"io_gas_units\":\"5\",\"storage_fee_octas\":\"0\",\"storage_fee_refund_octas\":\"0\",\"total_charge_gas_units\":\"349\"}", + "typeStr": "0x1::transaction_fee::FeeStatement" + } + ] + }, + "sizeInfo": { + "transactionBytes": 4561, + "eventSizeInfo": [ + { + "typeTagBytes": 65, + "totalBytes": 1223 + }, + { + "typeTagBytes": 58, + "totalBytes": 98 + }, + { + "typeTagBytes": 57, + "totalBytes": 97 + }, + { + "typeTagBytes": 63, + "totalBytes": 103 + } + ], + "writeOpSizeInfo": [ + { + "keyBytes": 110, + "valueBytes": 837 + }, + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 84, + "valueBytes": 147 + }, + { + "keyBytes": 87, + "valueBytes": 246 } ] } diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1005_ca_rollover.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1005_ca_rollover.json index dd68b34e..05d4c432 100644 --- a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1005_ca_rollover.json +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1005_ca_rollover.json @@ -1,62 +1,238 @@ { - "timestamp": { "seconds": "1700000005", "nanos": 0 }, - "version": "1005", + "timestamp": { + "seconds": "1777278908", + "nanos": 634586000 + }, + "version": "4632", "info": { - "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=", - "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=", - "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=", - "gasUsed": "500", + "hash": "u6l2vCuT908rAuV4NuqRLUcAKVB21zmqb/8buNjw7Nk=", + "stateChangeHash": "JNRZyh5OTf76OpDEOQQsjnfN5jcLsYaeK+wwMDPKVXA=", + "eventRootHash": "Lj4oc5PQz/K93gQbHHzw1Pr3Ry6dFyg1NTBb3+ajFbo=", + "gasUsed": "15", "success": true, "vmStatus": "Executed successfully", - "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=", - "changes": [] + "accumulatorRootHash": "cxgXWBz7t73+uabCz99qXyY/m62kHZsp9AymrYRhRcw=", + "changes": [ + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"3464400\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x9bb809cb154a393546da38ff08bc927679e77ecdb59dab49029315b54644e40e\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7", + "stateKeyHash": "tpv2zewHu7VwzdyQ3+K3vtAXIP84U46OeyfXAQjAPS4=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"949765200\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7", + "stateKeyHash": "tpv2zewHu7VwzdyQ3+K3vtAXIP84U46OeyfXAQjAPS4=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x6ef206f0251d65315b4b024e4fdb421e40b4f932f442656aa24290e8d1f7e9a7", + "stateKeyHash": "qnnq+BXh6iD7PRvLRZ+dhgzSDa/cWbmkY718qV/mcHc=", + "type": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "ConfidentialAssetStore" + }, + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::ConfidentialAssetStore", + "data": "{\"actual_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x7af2072a5cd06e2969a0b5b0a204f32b4cdfa573e7d92bb5ae750778ac830d2a\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x3ecba725a17ef10c1d20c27a08640918a62196c19b07e5e0bbff237678fce873\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"ek\":{\"point\":{\"data\":\"0x02bd8e95f31ca30e8e34d281cadf6c2cc3aafedce687cf7343b0dcea8d23da42\"}},\"frozen\":false,\"normalized\":false,\"pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"pending_counter\":\"0\"}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "stateKeyHash": "9pi5SqyCeZSOIAveAFksN37ar2I4xzA4j3x35X1cpVQ=", + "type": { + "address": "0x1", + "module": "account", + "name": "Account" + }, + "typeStr": "0x1::account::Account", + "data": "{\"authentication_key\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"coin_register_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"creation_num\":\"0\"}}},\"guid_creation_num\":\"2\",\"key_rotation_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"creation_num\":\"1\"}}},\"rotation_capability_offer\":{\"for\":{\"vec\":[]}},\"sequence_number\":\"4\",\"signer_capability_offer\":{\"for\":{\"vec\":[]}}}" + } + } + ] }, - "epoch": "1", - "blockHeight": "1005", + "epoch": "90", + "blockHeight": "2312", "type": "TRANSACTION_TYPE_USER", - "sizeInfo": { - "transactionBytes": 100, - "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 200 }], - "writeOpSizeInfo": [] - }, "user": { "request": { - "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", - "sequenceNumber": "4", - "maxGasAmount": "100000", + "sender": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "sequenceNumber": "3", + "maxGasAmount": "2000000", "gasUnitPrice": "100", - "expirationTimestampSecs": { "seconds": "9999999999" }, + "expirationTimestampSecs": { + "seconds": "1777279508" + }, "payload": { "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", "entryFunctionPayload": { "function": { - "module": { "address": "0x1", "name": "confidential_asset" }, + "module": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "name": "confidential_asset" + }, "name": "rollover_pending_balance" }, - "typeArguments": [], - "arguments": [], - "entryFunctionIdStr": "0x1::confidential_asset::rollover_pending_balance" - } + "arguments": ["{\"inner\":\"0xa\"}"], + "entryFunctionIdStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::rollover_pending_balance" + }, + "extraConfigV1": {} }, "signature": { "type": "TYPE_ED25519", "ed25519": { - "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + "publicKey": "saPw/4UW16G4RS6SLgp8U/JxXjH2L2e86MlzDLWkIgg=", + "signature": "PxOhUkA1lWJqi7I/80R/0UAMhF3eUVDN2G4OLqtG8LvGvaphYfvuMq6k4fVME5VgB3r+Nhf61nUflg3LHVJaCw==" } } }, "events": [ { "key": { - "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + "accountAddress": "0x0" }, "type": { "type": "MOVE_TYPES_STRUCT", - "struct": { "address": "0x1", "module": "confidential_asset", "name": "RolledOver" } + "struct": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "RolledOver" + } }, - "typeStr": "0x1::confidential_asset::RolledOver", - "data": "{\"addr\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"new_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]}}" + "data": "{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"asset_type\":\"0xa\",\"new_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x7af2072a5cd06e2969a0b5b0a204f32b4cdfa573e7d92bb5ae750778ac830d2a\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x3ecba725a17ef10c1d20c27a08640918a62196c19b07e5e0bbff237678fce873\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]}}", + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::RolledOver" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Withdraw" + } + }, + "data": "{\"amount\":\"1500\",\"store\":\"0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7\"}", + "typeStr": "0x1::fungible_asset::Withdraw" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Deposit" + } + }, + "data": "{\"amount\":\"1500\",\"store\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\"}", + "typeStr": "0x1::fungible_asset::Deposit" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "transaction_fee", + "name": "FeeStatement" + } + }, + "data": "{\"execution_gas_units\":\"14\",\"io_gas_units\":\"2\",\"storage_fee_octas\":\"0\",\"storage_fee_refund_octas\":\"0\",\"total_charge_gas_units\":\"15\"}", + "typeStr": "0x1::transaction_fee::FeeStatement" + } + ] + }, + "sizeInfo": { + "transactionBytes": 277, + "eventSizeInfo": [ + { + "typeTagBytes": 64, + "totalBytes": 657 + }, + { + "typeTagBytes": 58, + "totalBytes": 98 + }, + { + "typeTagBytes": 57, + "totalBytes": 97 + }, + { + "typeTagBytes": 63, + "totalBytes": 103 + } + ], + "writeOpSizeInfo": [ + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 110, + "valueBytes": 837 + }, + { + "keyBytes": 84, + "valueBytes": 147 } ] } diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1006_ca_normalize.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1006_ca_normalize.json index cb25e1bf..4307e57a 100644 --- a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1006_ca_normalize.json +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1006_ca_normalize.json @@ -1,62 +1,243 @@ { - "timestamp": { "seconds": "1700000006", "nanos": 0 }, - "version": "1006", + "timestamp": { + "seconds": "1777278909", + "nanos": 886903000 + }, + "version": "4637", "info": { - "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF=", - "stateChangeHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF=", - "eventRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF=", - "gasUsed": "500", + "hash": "4DcEWjtwBRVz6GqsEQXoft/0G1YHTD+jPuYi4/v4gM4=", + "stateChangeHash": "+SoiEh4eoSP/5+pZGG1QY/RKO0w+sRLDp6qPVTLjNks=", + "eventRootHash": "BK34ahklLW9/M0uUZGWkmKmXsnvH8qn/F1Fd18dGE8M=", + "gasUsed": "218", "success": true, "vmStatus": "Executed successfully", - "accumulatorRootHash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF=", - "changes": [] + "accumulatorRootHash": "cnOhyTYrj/GVCqMTJBJ+DNLIOoSfx1L27g7omFY3n7Q=", + "changes": [ + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"3486200\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x9bb809cb154a393546da38ff08bc927679e77ecdb59dab49029315b54644e40e\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7", + "stateKeyHash": "tpv2zewHu7VwzdyQ3+K3vtAXIP84U46OeyfXAQjAPS4=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"949743400\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7", + "stateKeyHash": "tpv2zewHu7VwzdyQ3+K3vtAXIP84U46OeyfXAQjAPS4=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x6ef206f0251d65315b4b024e4fdb421e40b4f932f442656aa24290e8d1f7e9a7", + "stateKeyHash": "qnnq+BXh6iD7PRvLRZ+dhgzSDa/cWbmkY718qV/mcHc=", + "type": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "ConfidentialAssetStore" + }, + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::ConfidentialAssetStore", + "data": "{\"actual_balance\":{\"chunks\":[{\"left\":{\"data\":\"0xa4d8625a5f118d204e5ccc662920e2d012e8c3a4d5ef96b3059dec4f7f681172\"},\"right\":{\"data\":\"0x5aa8655e95e7379952253b9ea349edc96f579261b3bb940d4444c6e34b8dd77b\"}},{\"left\":{\"data\":\"0x10632171d1d0b2af37e553384af6f68fa7e64bf83a38f4a55f8a4aace3f73c69\"},\"right\":{\"data\":\"0x28671d90dcef7747783444a94d1e2e5db74d39af701524706489ae6ea83f075d\"}},{\"left\":{\"data\":\"0xdcd04e5fafa52c8ebaf692f3324de913e0e48acd8e8525a70bd63d67c0619377\"},\"right\":{\"data\":\"0x0e0d53a6ba74985a5f277314513948f32ecf2a68297bd9860c0b26b60a164301\"}},{\"left\":{\"data\":\"0xda31f760f1b8f33c0694d6507fecaeab8fdee3f380bae7e3d7fd46e4b0160520\"},\"right\":{\"data\":\"0xe4bdd3cc1aad12b7e66a967e3ef9f6ffd446d2e1d707d2b94b158ac61c0a2974\"}},{\"left\":{\"data\":\"0x767a598977b1cb71b2e929caae9b7af0987b8bc190ba7d270a2e63ca97375800\"},\"right\":{\"data\":\"0xba183855cf3528e7b106e83f9c767676da314af8fcef226ccc5cb127b59e0b5f\"}},{\"left\":{\"data\":\"0x78e6d39fbca69eb39a37a9a0f37407a89087c4c54c866b0c59ec1991e259fc1a\"},\"right\":{\"data\":\"0x289653f502235d2997e5e9610e0acb297ac6dd68968a650b5a98047b308bab7f\"}},{\"left\":{\"data\":\"0x8e38351981e4c073a43c33f9ba31342851ec4da18869079adc40d6f59a721877\"},\"right\":{\"data\":\"0x5e9ef79bafaf24f3cedd74e5b254aa104bd6263ec2f77ec1a435e499b876e911\"}},{\"left\":{\"data\":\"0x36bd96c788123729a59e4eae4c462bdf31b89ac82f4caf788a6ef5364a661e3f\"},\"right\":{\"data\":\"0x749ed067061ef768a17275730e896f8dad33c99003cad66dd4c1ccaf0ac7691d\"}}]},\"ek\":{\"point\":{\"data\":\"0x02bd8e95f31ca30e8e34d281cadf6c2cc3aafedce687cf7343b0dcea8d23da42\"}},\"frozen\":false,\"normalized\":true,\"pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"pending_counter\":\"0\"}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "stateKeyHash": "9pi5SqyCeZSOIAveAFksN37ar2I4xzA4j3x35X1cpVQ=", + "type": { + "address": "0x1", + "module": "account", + "name": "Account" + }, + "typeStr": "0x1::account::Account", + "data": "{\"authentication_key\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"coin_register_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"creation_num\":\"0\"}}},\"guid_creation_num\":\"2\",\"key_rotation_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"creation_num\":\"1\"}}},\"rotation_capability_offer\":{\"for\":{\"vec\":[]}},\"sequence_number\":\"5\",\"signer_capability_offer\":{\"for\":{\"vec\":[]}}}" + } + } + ] }, - "epoch": "1", - "blockHeight": "1006", + "epoch": "90", + "blockHeight": "2314", "type": "TRANSACTION_TYPE_USER", - "sizeInfo": { - "transactionBytes": 100, - "eventSizeInfo": [{ "typeTagBytes": 50, "totalBytes": 200 }], - "writeOpSizeInfo": [] - }, "user": { "request": { - "sender": "0x1111111111111111111111111111111111111111111111111111111111111111", - "sequenceNumber": "5", - "maxGasAmount": "100000", + "sender": "0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45", + "sequenceNumber": "4", + "maxGasAmount": "2000000", "gasUnitPrice": "100", - "expirationTimestampSecs": { "seconds": "9999999999" }, + "expirationTimestampSecs": { + "seconds": "1777279510" + }, "payload": { "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", "entryFunctionPayload": { "function": { - "module": { "address": "0x1", "name": "confidential_asset" }, + "module": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "name": "confidential_asset" + }, "name": "normalize" }, - "typeArguments": [], - "arguments": [], - "entryFunctionIdStr": "0x1::confidential_asset::normalize" - } + "arguments": [ + "{\"inner\":\"0xa\"}", + "\"0xa4d8625a5f118d204e5ccc662920e2d012e8c3a4d5ef96b3059dec4f7f6811725aa8655e95e7379952253b9ea349edc96f579261b3bb940d4444c6e34b8dd77b10632171d1d0b2af37e553384af6f68fa7e64bf83a38f4a55f8a4aace3f73c6928671d90dcef7747783444a94d1e2e5db74d39af701524706489ae6ea83f075ddcd04e5fafa52c8ebaf692f3324de913e0e48acd8e8525a70bd63d67c06193770e0d53a6ba74985a5f277314513948f32ecf2a68297bd9860c0b26b60a164301da31f760f1b8f33c0694d6507fecaeab8fdee3f380bae7e3d7fd46e4b0160520e4bdd3cc1aad12b7e66a967e3ef9f6ffd446d2e1d707d2b94b158ac61c0a2974767a598977b1cb71b2e929caae9b7af0987b8bc190ba7d270a2e63ca97375800ba183855cf3528e7b106e83f9c767676da314af8fcef226ccc5cb127b59e0b5f78e6d39fbca69eb39a37a9a0f37407a89087c4c54c866b0c59ec1991e259fc1a289653f502235d2997e5e9610e0acb297ac6dd68968a650b5a98047b308bab7f8e38351981e4c073a43c33f9ba31342851ec4da18869079adc40d6f59a7218775e9ef79bafaf24f3cedd74e5b254aa104bd6263ec2f77ec1a435e499b876e91136bd96c788123729a59e4eae4c462bdf31b89ac82f4caf788a6ef5364a661e3f749ed067061ef768a17275730e896f8dad33c99003cad66dd4c1ccaf0ac7691d\"", + "\"0x7a77690581a1c4bf1590a203e379a05578d1f6f61b6a02cbfa1c7e5a6fc68f709e88bb606fa53e0fcc3db987b80785217b1a7116d7a4a9f4a3c659c09d61df12b25d73b0715d5f934c1ebcb55d15944a18818e78ce1a2856d2d85d473a45e23c6c7ff6dc8e54e1d4e9c2373d7120b602126ed2e6e925c98597ac01756643d6698f5818ad4ad7f571f479e6f82bc7a22e65c54fbc381bff321eba2faa8e1e120027816b01e1aabe1903f635b036b0782e01c5fffc7e6849253c6052bd332ccf0a53a8dec4a138564ce4f37558f1fafc65ede207a2c099ac8b8a1266755d82a20d50be3fdff4a13f411cb21120adad0166e16674c037b9f60fd8039f51d774a456486dd0b7d679a88a9d61995f58e2940810d8e10cf4e48d509a7efdbe6fcb9e1df4d2b9923891149cbee62cc4ea257c5f25b8e66d16d3f5232c63363fa2199c544cd7f8820f44b0930374ef4bfebfb179954da3ff2c43ccebc8eb75cb8981d14c74b92868bac9381005b41aeac03b4fb8e88b044d256e00b59a1266af9f79920798a4d441f34dcb668fd12de159348fe026d5407980f5843964b257923e372023062f2930c69d2f38318f9aa67d697bfe9cd0591c976286f3296a616076e4f90a9ccbdbf9277435b040bd31ba3420d24790b3f811a76b034f4c20f2aa0402692c3e34daf7b4406c21e0b3264d878c1e3bd80bf8c17eb78d38ba1890ad33dd520dda44dd56dc1b3a9bb24017898c46167fd3026913b8afbe558748b3110dc9743b267874ea47d8d29d5fe1d76b5e7382a773688b82b0f41ff19520d486b64e114e50d5848de1fa035552dc24d0276320530d6bf933491d29e1ea5fc993142f29771269576f76f478d2e3174e838238920375e9a2a936975cee5e9a86921ba3846cf0491285ee1a0f08ba708d9e5fd8a0fc826df228396a793ef7c3d6b00126095ea5673d41c18510e5e3a7329c9e42127f8ed0ef903ab51ed710a43a323b3d160cb9552f10a67d111cce17360a1ff08b9b692dc38b7463b19fbb113f4c4f48a409\"", + "\"0x3d49267fc9f650720bd9d1fb66cd41f91c0cf0fecd1bf9d1a8226a63514c190453142581f1a1893dfbe8a227ee1f2d13452aa26999e3847bd31fc860c3170701bd1633ca2d1c759cc365e51f4ec25ace02aabceeedc63ee47b303ee20a949006466fe96a1eebe3a53a5b6fefdf97607ea1bb58ed1e87594d444071afc55cd807e18f5557aaa3146c1b42406df4286bc2de910deaeac003f64018a8eaeb326904184c561e6c09b5d582f77c574ec5378bc3abe36d944e140512887b1d2b61310541c89198ed6027068314de3b5d8ff781d6aff27fd64167f40fc7467c64bc71017cae4b8f4a2f0081a3bba2ca3b6666dcafddd093f2447d34b81335364198290c2cb48e78fd3910cbbbccbe611b3929d1e64b831cd61c3afb9e2ac37a8355460421fc4acbfe60ced51b620f4f6dccddee4792f90ba1cb005770488edc53e1580022aa83e239b74ceb9a821131f0a86411a60d585cd65b329d08c11a740c63420643dddc1419e9baa71f9ef5068d3bd170931ed25d7d04f5ce93118ca6babb9701ab51570bd409e4f0da69c195ea9af1b93c406997ee5256191b32449995af2b0a612a54057bde888a772356b349ac42eea4894dfad0c8a53ad6358ae1a646770c5a095140e4cb94b1ab03a0ad4236d2e6dd75c11d1e382e95e3765c183db1740d3b18678cf9d09a6820c6a48f0836ffe79bd37ec622ce45efa33bbc05c5c02a08416a368642bdf0b94885831d509a39735693682e19b77574c5fe4d8b41594f04cb32214e4ad114225c1639cfe3668a7b7ff0222d5483695e68ed2dc6ba9b3c0a34432eab07339d16c8b203d4e740198b78221cd018db4bf50ec867d187cae45a9ef9c7f522376cf2b3d87e528e9cf6569c527ca647b0245de86c775522e765719a60b5c551135ba6939a29a4ab718f2892b3b4fa2a7de0ee86302465879c732778cc24603329634153eab5dc43d44b35c3086e228b1695a5b2c9bc001af0e930069eb56c5222fac6e44a442cc211c9cd18a8ed07a03d0869b0fe9e5857813e610e90b0b3e7cf5745bd61dea5c434ae8f6b289029b0cfbcd56648ea8d2923525e9c2a4bd20f7e072d941316f271139e94b177a3750a29eff78babac013939e368129e678f4998b184c815a17deae3f218fbea25dfa586845676e85b9ff7ab4e67386e783331aeb38e050699feeecacb2770d1c073262e791b0d7f3470a9c7ed074c416ca20e88807d7b229c7dc06d0fd592e21326b512ae6bf7795916b703193566096bd46c3494a46dbdd2a7ec72f1f43d275824a4f23f8b2eab3a6a2ed1800ad20ed7146c2f95a1281db51e39466f085cb1174fc0e67f7ca6a8a1541d7cf20e8c7d5c946fbdc2bc967dba0c2c5a7f7f0db63dc1fbc0628a1f7cbfed24a00920c264aff8a325c077577207552266bba32f6fd0521a8e467c5fef4503eb9cf4169ae299b437086f945fe0a0c792165fcdb37450c8378005c8c900183001d76c0dd0ce8acc4a4d57feea7229687cfeb6e063fd684ea6c9143613669dede2e4dd1254d826e9c050d9c872695bf38e41f3764cafce2587b68b4d5433110dfa11b83f6079cd53fb96bf3a9029811623c774a1ec12cc0876eaa373344ae37556d1fb59\"" + ], + "entryFunctionIdStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::normalize" + }, + "extraConfigV1": {} }, "signature": { "type": "TYPE_ED25519", "ed25519": { - "publicKey": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "signature": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" + "publicKey": "saPw/4UW16G4RS6SLgp8U/JxXjH2L2e86MlzDLWkIgg=", + "signature": "6x+OojAGcbacArpWZJUPwTQHCPPz6ZqeFZe8/9muIlF1VDtw2KTNDIoFZXMJg80zeHs1MVSA6yB4hoMhemr6BQ==" } } }, "events": [ { "key": { - "accountAddress": "0x1111111111111111111111111111111111111111111111111111111111111111" + "accountAddress": "0x0" }, "type": { "type": "MOVE_TYPES_STRUCT", - "struct": { "address": "0x1", "module": "confidential_asset", "name": "Normalized" } + "struct": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "Normalized" + } }, - "typeStr": "0x1::confidential_asset::Normalized", - "data": "{\"addr\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"asset_type\":\"0x3333333333333333333333333333333333333333333333333333333333333333\",\"new_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]}}" + "data": "{\"addr\":\"0x7dc4782d55e8493e70477f366bcbef85f3c48713d1db3fc2d50e99318ccb2b45\",\"asset_type\":\"0xa\",\"new_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0xa4d8625a5f118d204e5ccc662920e2d012e8c3a4d5ef96b3059dec4f7f681172\"},\"right\":{\"data\":\"0x5aa8655e95e7379952253b9ea349edc96f579261b3bb940d4444c6e34b8dd77b\"}},{\"left\":{\"data\":\"0x10632171d1d0b2af37e553384af6f68fa7e64bf83a38f4a55f8a4aace3f73c69\"},\"right\":{\"data\":\"0x28671d90dcef7747783444a94d1e2e5db74d39af701524706489ae6ea83f075d\"}},{\"left\":{\"data\":\"0xdcd04e5fafa52c8ebaf692f3324de913e0e48acd8e8525a70bd63d67c0619377\"},\"right\":{\"data\":\"0x0e0d53a6ba74985a5f277314513948f32ecf2a68297bd9860c0b26b60a164301\"}},{\"left\":{\"data\":\"0xda31f760f1b8f33c0694d6507fecaeab8fdee3f380bae7e3d7fd46e4b0160520\"},\"right\":{\"data\":\"0xe4bdd3cc1aad12b7e66a967e3ef9f6ffd446d2e1d707d2b94b158ac61c0a2974\"}},{\"left\":{\"data\":\"0x767a598977b1cb71b2e929caae9b7af0987b8bc190ba7d270a2e63ca97375800\"},\"right\":{\"data\":\"0xba183855cf3528e7b106e83f9c767676da314af8fcef226ccc5cb127b59e0b5f\"}},{\"left\":{\"data\":\"0x78e6d39fbca69eb39a37a9a0f37407a89087c4c54c866b0c59ec1991e259fc1a\"},\"right\":{\"data\":\"0x289653f502235d2997e5e9610e0acb297ac6dd68968a650b5a98047b308bab7f\"}},{\"left\":{\"data\":\"0x8e38351981e4c073a43c33f9ba31342851ec4da18869079adc40d6f59a721877\"},\"right\":{\"data\":\"0x5e9ef79bafaf24f3cedd74e5b254aa104bd6263ec2f77ec1a435e499b876e911\"}},{\"left\":{\"data\":\"0x36bd96c788123729a59e4eae4c462bdf31b89ac82f4caf788a6ef5364a661e3f\"},\"right\":{\"data\":\"0x749ed067061ef768a17275730e896f8dad33c99003cad66dd4c1ccaf0ac7691d\"}}]}}", + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::Normalized" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Withdraw" + } + }, + "data": "{\"amount\":\"21800\",\"store\":\"0x2dcc13ee86d9a35e54618eaec1e04982fb5fc68380bd6e5898f06a3cc04ca9e7\"}", + "typeStr": "0x1::fungible_asset::Withdraw" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Deposit" + } + }, + "data": "{\"amount\":\"21800\",\"store\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\"}", + "typeStr": "0x1::fungible_asset::Deposit" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "transaction_fee", + "name": "FeeStatement" + } + }, + "data": "{\"execution_gas_units\":\"215\",\"io_gas_units\":\"4\",\"storage_fee_octas\":\"0\",\"storage_fee_refund_octas\":\"0\",\"total_charge_gas_units\":\"218\"}", + "typeStr": "0x1::transaction_fee::FeeStatement" + } + ] + }, + "sizeInfo": { + "transactionBytes": 2674, + "eventSizeInfo": [ + { + "typeTagBytes": 64, + "totalBytes": 657 + }, + { + "typeTagBytes": 58, + "totalBytes": 98 + }, + { + "typeTagBytes": 57, + "totalBytes": 97 + }, + { + "typeTagBytes": 63, + "totalBytes": 103 + } + ], + "writeOpSizeInfo": [ + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 110, + "valueBytes": 837 + }, + { + "keyBytes": 84, + "valueBytes": 147 } ] } diff --git a/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1007_ca_key_rotate.json b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1007_ca_key_rotate.json new file mode 100644 index 00000000..1a4d4a08 --- /dev/null +++ b/integration-tests/src/sdk_tests/test_transactions/confidential_asset/1007_ca_key_rotate.json @@ -0,0 +1,245 @@ +{ + "timestamp": { + "seconds": "1777278924", + "nanos": 990165000 + }, + "version": "4827", + "info": { + "hash": "i2x8WCcac8KgpG52XhO72EDsQqb/aIPFDh3DtC3B10c=", + "stateChangeHash": "THaV7xs4IG1lsoTwbzMQjLSaCSmIa73hgUro14pArUU=", + "eventRootHash": "RVZYHDiyxre2dPNHKA7AH9g6S9GYzdrVSRmbIkbsNhw=", + "gasUsed": "222", + "success": true, + "vmStatus": "Executed successfully", + "accumulatorRootHash": "55Ll7eJAmGbjowXCu2fY9JXn5XjAzaJbjjzc7JUds5M=", + "changes": [ + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"5417000\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809", + "stateKeyHash": "YkfiqPytQ9m572TUKyYQQ/LW/a5OVjCgYLBLlKDli2E=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x9bb809cb154a393546da38ff08bc927679e77ecdb59dab49029315b54644e40e\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\",\"creation_num\":\"1125899906842624\"}}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0x736f3af18eb712d517f36f103ae156979076e0eab11335b43d1c98a7a855348d", + "stateKeyHash": "kw7c2eJnjvZynqlHC1qi5ylkw6mlZvwddvaP7MgsXig=", + "type": { + "address": "0x1", + "module": "account", + "name": "Account" + }, + "typeStr": "0x1::account::Account", + "data": "{\"authentication_key\":\"0x736f3af18eb712d517f36f103ae156979076e0eab11335b43d1c98a7a855348d\",\"coin_register_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x736f3af18eb712d517f36f103ae156979076e0eab11335b43d1c98a7a855348d\",\"creation_num\":\"0\"}}},\"guid_creation_num\":\"2\",\"key_rotation_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0x736f3af18eb712d517f36f103ae156979076e0eab11335b43d1c98a7a855348d\",\"creation_num\":\"1\"}}},\"rotation_capability_offer\":{\"for\":{\"vec\":[]}},\"sequence_number\":\"5\",\"signer_capability_offer\":{\"for\":{\"vec\":[]}}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xe41d92ada82d9463776f4072419eca62785b47c5461a86c93e070a895dc17caa", + "stateKeyHash": "owvCwW9EegePzLDROpjXs1xmLTL/QvazpjyRym7QcRw=", + "type": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "ConfidentialAssetStore" + }, + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::ConfidentialAssetStore", + "data": "{\"actual_balance\":{\"chunks\":[{\"left\":{\"data\":\"0xbe8fae5aba97cee3126f8568b193bff19b2e105a910d3cd7fb3aef7858f6c90f\"},\"right\":{\"data\":\"0x3edc9e7dfcfd5788e7769d637762e1e4c50791524c9485e5fbc070e30aa8d71c\"}},{\"left\":{\"data\":\"0x84dae8768b6e5de0554dc1d69289f06bb15be0f8b4db0efb46adfba894772857\"},\"right\":{\"data\":\"0xe8ee14e803fe877ddacf1f934c8477a4b16ccf089a3783c3ed3805a6d3223e55\"}},{\"left\":{\"data\":\"0xf460f992c1d9c3e8bc2438839503632f9e97abefaa5101b911eeae751996f23b\"},\"right\":{\"data\":\"0xa4189ce6f0633be540f018ac4e9f91ed6ca674337dc2d881d6617b7eb82fc56e\"}},{\"left\":{\"data\":\"0xd0d3c881492de60a0cfa520ebb2e961cd9aa00358c4f2c10061c5c0dd44b8932\"},\"right\":{\"data\":\"0x46051f4c2453206bb8c8492f9ac347754026502b3cfb87128c0e876062f57826\"}},{\"left\":{\"data\":\"0xa61a08f43303ad833655340b8082d9fc4ed3dfa2a630122a4ecaad1e4717a910\"},\"right\":{\"data\":\"0xaa7d3a9ca7cdf57cfce6dbe8b186f9b2e12308bbaa092ff16830ce4d1a9edc05\"}},{\"left\":{\"data\":\"0xca81088a1c2d60881b8f7ccd6e128ddc4bf1f23affdfd7a73587fa9473dea634\"},\"right\":{\"data\":\"0x16109b2ea1ccc266198bf48aa2376b491d703bde968dc95a49ebf9a5cdbed95a\"}},{\"left\":{\"data\":\"0xcea698ac554e4775bec294fbcd695e0fc4520ae5b239797a76d06fdb769e0e03\"},\"right\":{\"data\":\"0x289d1aab0bb60a2278dce7d41845d069ad0c24f69f60fe207e9b874515370755\"}},{\"left\":{\"data\":\"0x84708d1510c391e68a19e0f5a209aedf85a0fc1064521f9b15d5d98c401f2663\"},\"right\":{\"data\":\"0x7e97c71ef9fe3df8a3b9752985480dc18b08fc1ef4faa0343ac366e86ef71108\"}}]},\"ek\":{\"point\":{\"data\":\"0x7ea6e108a22cf9e8112085c8d3b8bdc73d2fd8317309040135cdc4ef4970b12a\"}},\"frozen\":false,\"normalized\":true,\"pending_balance\":{\"chunks\":[{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}},{\"left\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"},\"right\":{\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}}]},\"pending_counter\":\"0\"}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xf39274024cf0a9f0145e8338197c429dce67d74e367d54a071d6cd6832ed80b1", + "stateKeyHash": "ulZgP+5mbsL7A9N1bJKYgv97XI03Run8shnbjAM9vRg=", + "type": { + "address": "0x1", + "module": "fungible_asset", + "name": "FungibleStore" + }, + "typeStr": "0x1::fungible_asset::FungibleStore", + "data": "{\"balance\":\"999796295\",\"frozen\":false,\"metadata\":{\"inner\":\"0xa\"}}" + } + }, + { + "type": "TYPE_WRITE_RESOURCE", + "writeResource": { + "address": "0xf39274024cf0a9f0145e8338197c429dce67d74e367d54a071d6cd6832ed80b1", + "stateKeyHash": "ulZgP+5mbsL7A9N1bJKYgv97XI03Run8shnbjAM9vRg=", + "type": { + "address": "0x1", + "module": "object", + "name": "ObjectCore" + }, + "typeStr": "0x1::object::ObjectCore", + "data": "{\"allow_ungated_transfer\":false,\"guid_creation_num\":\"1125899906842625\",\"owner\":\"0x736f3af18eb712d517f36f103ae156979076e0eab11335b43d1c98a7a855348d\",\"transfer_events\":{\"counter\":\"0\",\"guid\":{\"id\":{\"addr\":\"0xf39274024cf0a9f0145e8338197c429dce67d74e367d54a071d6cd6832ed80b1\",\"creation_num\":\"1125899906842624\"}}}}" + } + } + ] + }, + "epoch": "90", + "blockHeight": "2390", + "type": "TRANSACTION_TYPE_USER", + "user": { + "request": { + "sender": "0x736f3af18eb712d517f36f103ae156979076e0eab11335b43d1c98a7a855348d", + "sequenceNumber": "4", + "maxGasAmount": "2000000", + "gasUnitPrice": "100", + "expirationTimestampSecs": { + "seconds": "1777279525" + }, + "payload": { + "type": "TYPE_ENTRY_FUNCTION_PAYLOAD", + "entryFunctionPayload": { + "function": { + "module": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "name": "confidential_asset" + }, + "name": "rotate_encryption_key" + }, + "arguments": [ + "{\"inner\":\"0xa\"}", + "\"0x7ea6e108a22cf9e8112085c8d3b8bdc73d2fd8317309040135cdc4ef4970b12a\"", + "\"0xbe8fae5aba97cee3126f8568b193bff19b2e105a910d3cd7fb3aef7858f6c90f3edc9e7dfcfd5788e7769d637762e1e4c50791524c9485e5fbc070e30aa8d71c84dae8768b6e5de0554dc1d69289f06bb15be0f8b4db0efb46adfba894772857e8ee14e803fe877ddacf1f934c8477a4b16ccf089a3783c3ed3805a6d3223e55f460f992c1d9c3e8bc2438839503632f9e97abefaa5101b911eeae751996f23ba4189ce6f0633be540f018ac4e9f91ed6ca674337dc2d881d6617b7eb82fc56ed0d3c881492de60a0cfa520ebb2e961cd9aa00358c4f2c10061c5c0dd44b893246051f4c2453206bb8c8492f9ac347754026502b3cfb87128c0e876062f57826a61a08f43303ad833655340b8082d9fc4ed3dfa2a630122a4ecaad1e4717a910aa7d3a9ca7cdf57cfce6dbe8b186f9b2e12308bbaa092ff16830ce4d1a9edc05ca81088a1c2d60881b8f7ccd6e128ddc4bf1f23affdfd7a73587fa9473dea63416109b2ea1ccc266198bf48aa2376b491d703bde968dc95a49ebf9a5cdbed95acea698ac554e4775bec294fbcd695e0fc4520ae5b239797a76d06fdb769e0e03289d1aab0bb60a2278dce7d41845d069ad0c24f69f60fe207e9b87451537075584708d1510c391e68a19e0f5a209aedf85a0fc1064521f9b15d5d98c401f26637e97c71ef9fe3df8a3b9752985480dc18b08fc1ef4faa0343ac366e86ef71108\"", + "\"0x14fb707d8b993052a8f74e3c24fab6f510f819ac438fc7f0024674b792193514301660f32d0f4da22e69ad08eb619adeaf9392bc376ae842dee50838bce79e27a00d99b5a0e9628df454823c5ccfb6cf59ff3eddd6d18cb2eeb0f5b7734aa3510c2b030e6409d0759a6b122ebd5cd7256462c279a43721893db533522116cd57400ecaa6b166b805054cbb893fe22e1eafcb393295a9e3055d05556f2725e209a446cc8ff58eefe1f046987d24a8ea4fdfeb3fa5a0f0e44e56c51edf8e285001c0ce9b0c92c1a1629080899b5f0da825c7d9c49e023773f127787c14dcb4430eb4f0040a1a9e0ed217aad761d19ff85c0a62b4f15848241c8c703bf0fe0649776675297f04f259c1533f54524fcca63d9d3152ffcce65d3a7fbb28829f31a55a7af864144f111f57589ee6770b90f6d61f77d8927c987b5f5957e6fb5a0fb92e9cc9cb2b51c895e322924ea3816d1e183c0895a2a49fe97430664d7a6f0929430ce0e2fdaae3c4eba5de02b71ee10688598d12083e1e7451b2e3872ef6bee81c086c8d8a04e3fa18a27a2ec06e7cd696224812966a39f905eedb06459dc3b04eea01c7274f323bdfcd9a060c1269247ab0b6dfb6f4d21fb7cf1b1fefc50cc00204945dfa43d48e3266772303ba38f8b588fe0c13a1f9ed48c3d329d60a7de760e8101663618b03f528b324bc348ac8712eb3d6933f28a92ac43220f5d7f93a0a8c71969f901e1e33ede5f3defb49c48103873af0e91eee98984e4ec07f06074ce45a393a0861547866e8d3c34b2adee350d7500b02071fab9ac9fd97422edb3c3c9ca73f1ea9a03eecd07a75018654232fc0a0d358ac360e784ae3f76601740c6ecbd9d33a46722e1baf362145874e86e74631f42c9451a4dae344cd28960d03fe30f9a3403045f1620206c91f252d381099cc2b37a2a57e67d9f67ed4db8e6249e1f8d44fd38291f9363350320a0c0dea9435832588f2c3c8c56873fc639300f5b29db06baf9e1aa03f268e0fe77e5c54939b3da26d3accee5ce750dcd6510b\"", + "\"0xd86c289254c26026c2f91b939fee75012e7a6320734198f885c2d21be5a34707754769ef742a877b209ccbfea5b4335bdbe21e5148f2e6b4ec3fcb46774ed90a19694cffad043950a4d9d4589a4f0e1ad2ae8ce22677d150712692d7f074fe0f1ea310e316293b483b1d26cf7d5dfc98dd28d9bd712e688ae9344ca0384ee40dbc45393fdfc073579b7717db01215826bb1af4544772217f3714e19b4d203d0b6e443e44773b1e6139d2aee2cd3e174c5619ac4b0e8ff4f02dbe890519c4570d0f31599692236b0594266bb7572f00f8b904731351335459ceae2a80ad4bb004345095e4b112b46a4f7cdc846b56cce2e9012bc2ab6f105774584452d3343702c3bba571ddeb66880fca4be5a4d1127be634e8a895a1e04950fb4f148f3991017d0251a3fcd05a09ec74a31b3aeb7aee8e7b53f7045a3ec39cae3e0eaa0a22051b7207c701ec57fc20dd0298061fb54e1819faebd1a82b947a8a297209d3d706f7bc677ff393275407fd43d00c34018ad2b029bc03166bab6c89dfaa3530eb00cf5ccc961e5816a09cce52ad438a35c05692d97de82ed725692b15429952e70294a96986d14c8c6af67fc156ce1df79ff853fb0a8c705b4f1b85319cc9eb9e05c46917a95d38799f37591aefa9b7f2957b835f0253d7fd961af090d048142a0e544d3a00765eede990f1d29b8cc5608305a8ac8f6b9afc4937d803f9a4fc27076d759f9061423f8d92836ded9f33102caa70a76b991e3e772b468ee84b8a5f0da23719f00c89d45f614f1062bd985b1208ad31f4755700f21152b6f25345b60901ca6d8ef7b4941dc534d204ad88583cd360cafd38b79d111a2da387eaad6b06fa1c138e2dbcaaf71e14383f5e98965b28849bd3373b0770759d7604c7f3a94486878654653bf1ddd205e17828f09ad8d9bda8ab81bc64e7dd42cfe0c9363b51f41de9285f279e2b00f03e5d8541f6160e8b94f008325d8e46bc5889ce914524e28d93cb935dad6b53738ed5530aeec9f41b2bdbf727cc86c297b56391f6d81d161f068862f3e732605b718f998eea0fea08708a2ee92c51461c9f5604aa5958603e1b604023549f904f73788c12c0345dccda38f290d9907243987293066478e0cbab3f70fa1af373276f4e33e1f51163d0d7ed9b8abb699fc9fc97ff9dba4460fbfd51ff21bcf1ffc7d995e6b3d81755edaae46c4ad7d15a9b13a501570e62c239317dcf37f09bc2d8c47cf2729e39b45f2c09341ecc526a864a32e2a0287680e98138aa992f4d5433fbbd641d7824b84f9778baf592094e0072c54bc54a7cd8ca558093659d9719b090800b7f9ad000b86c2c07b898d7820064210bc3145a10208e36a97b3632500f48d350196ce8c9b8473f1a71dc8167284f4aca6f3605ec78fb70eeab02ba5d74d66bdc85c658ee2125e58224e9a532bc256d2d8ac445a493e3c94ab364ec1e6cbf701164b92c9705ef93bb4d5592aced20048501d43d842f2f0634a0f071abdbec4f85d51d673618c3b0784600fdd22283d9abf5b613421b6632876c780dcd642f916e856d31697f7aaa957f499187cde4ca24c5fa274a8088e321fb92e6d717ab01bbcd056b6b1734f6f303c266a2d5d62e97cd5b4cb837ec1fb9abb1f5a7385bb8fa71d482e4304e1f0ba692c5f9ea759f96867520c0a3777e456d0186629bacdfb1681f2cc35f63d07014f37778ae69d2e7c8f31a\"" + ], + "entryFunctionIdStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::rotate_encryption_key" + }, + "extraConfigV1": {} + }, + "signature": { + "type": "TYPE_ED25519", + "ed25519": { + "publicKey": "q2Y9uJeid7CReOQIeFv8jid70tF3V6b4Vtmo+cMery4=", + "signature": "GSN4j9+lxOs7BTqfNXdVSROqxzDOCNebX8fZMoxlL+RkDDVKNYylLON9pxg5vfRCjD9+YmY1f3TxQAHOtPLlBQ==" + } + } + }, + "events": [ + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91", + "module": "confidential_asset", + "name": "KeyRotated" + } + }, + "data": "{\"addr\":\"0x736f3af18eb712d517f36f103ae156979076e0eab11335b43d1c98a7a855348d\",\"asset_type\":\"0xa\",\"new_available_balance\":{\"chunks\":[{\"left\":{\"data\":\"0xbe8fae5aba97cee3126f8568b193bff19b2e105a910d3cd7fb3aef7858f6c90f\"},\"right\":{\"data\":\"0x3edc9e7dfcfd5788e7769d637762e1e4c50791524c9485e5fbc070e30aa8d71c\"}},{\"left\":{\"data\":\"0x84dae8768b6e5de0554dc1d69289f06bb15be0f8b4db0efb46adfba894772857\"},\"right\":{\"data\":\"0xe8ee14e803fe877ddacf1f934c8477a4b16ccf089a3783c3ed3805a6d3223e55\"}},{\"left\":{\"data\":\"0xf460f992c1d9c3e8bc2438839503632f9e97abefaa5101b911eeae751996f23b\"},\"right\":{\"data\":\"0xa4189ce6f0633be540f018ac4e9f91ed6ca674337dc2d881d6617b7eb82fc56e\"}},{\"left\":{\"data\":\"0xd0d3c881492de60a0cfa520ebb2e961cd9aa00358c4f2c10061c5c0dd44b8932\"},\"right\":{\"data\":\"0x46051f4c2453206bb8c8492f9ac347754026502b3cfb87128c0e876062f57826\"}},{\"left\":{\"data\":\"0xa61a08f43303ad833655340b8082d9fc4ed3dfa2a630122a4ecaad1e4717a910\"},\"right\":{\"data\":\"0xaa7d3a9ca7cdf57cfce6dbe8b186f9b2e12308bbaa092ff16830ce4d1a9edc05\"}},{\"left\":{\"data\":\"0xca81088a1c2d60881b8f7ccd6e128ddc4bf1f23affdfd7a73587fa9473dea634\"},\"right\":{\"data\":\"0x16109b2ea1ccc266198bf48aa2376b491d703bde968dc95a49ebf9a5cdbed95a\"}},{\"left\":{\"data\":\"0xcea698ac554e4775bec294fbcd695e0fc4520ae5b239797a76d06fdb769e0e03\"},\"right\":{\"data\":\"0x289d1aab0bb60a2278dce7d41845d069ad0c24f69f60fe207e9b874515370755\"}},{\"left\":{\"data\":\"0x84708d1510c391e68a19e0f5a209aedf85a0fc1064521f9b15d5d98c401f2663\"},\"right\":{\"data\":\"0x7e97c71ef9fe3df8a3b9752985480dc18b08fc1ef4faa0343ac366e86ef71108\"}}]},\"new_ek\":{\"point\":{\"data\":\"0x7ea6e108a22cf9e8112085c8d3b8bdc73d2fd8317309040135cdc4ef4970b12a\"}}}", + "typeStr": "0x7479cfb8c85eb869c2e7e718381b315b888c4146fe14d98f9a0a468b03b48b91::confidential_asset::KeyRotated" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Withdraw" + } + }, + "data": "{\"amount\":\"22200\",\"store\":\"0xf39274024cf0a9f0145e8338197c429dce67d74e367d54a071d6cd6832ed80b1\"}", + "typeStr": "0x1::fungible_asset::Withdraw" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "fungible_asset", + "name": "Deposit" + } + }, + "data": "{\"amount\":\"22200\",\"store\":\"0x975b461453e8c36ba66937eaf7f874f7d6a9b26d65e89389304bd1bfee94809\"}", + "typeStr": "0x1::fungible_asset::Deposit" + }, + { + "key": { + "accountAddress": "0x0" + }, + "type": { + "type": "MOVE_TYPES_STRUCT", + "struct": { + "address": "0x1", + "module": "transaction_fee", + "name": "FeeStatement" + } + }, + "data": "{\"execution_gas_units\":\"219\",\"io_gas_units\":\"4\",\"storage_fee_octas\":\"0\",\"storage_fee_refund_octas\":\"0\",\"total_charge_gas_units\":\"222\"}", + "typeStr": "0x1::transaction_fee::FeeStatement" + } + ] + }, + "sizeInfo": { + "transactionBytes": 2784, + "eventSizeInfo": [ + { + "typeTagBytes": 64, + "totalBytes": 690 + }, + { + "typeTagBytes": 58, + "totalBytes": 98 + }, + { + "typeTagBytes": 57, + "totalBytes": 97 + }, + { + "typeTagBytes": 63, + "totalBytes": 103 + } + ], + "writeOpSizeInfo": [ + { + "keyBytes": 87, + "valueBytes": 246 + }, + { + "keyBytes": 84, + "valueBytes": 147 + }, + { + "keyBytes": 110, + "valueBytes": 837 + }, + { + "keyBytes": 87, + "valueBytes": 246 + } + ] + } +} diff --git a/processor/ca-local-config.yaml b/processor/ca-local-config.yaml new file mode 100644 index 00000000..24c53023 --- /dev/null +++ b/processor/ca-local-config.yaml @@ -0,0 +1,16 @@ + health_check_port: 8085 + server_config: + processor_config: + type: confidential_asset_processor + channel_size: 100 + transaction_stream_config: + indexer_grpc_data_service_address: "http://127.0.0.1:50051" + auth_token: "local" + request_name_header: "confidential_asset_processor" + starting_version: 0 + processor_mode: + type: "default" + initial_starting_version: 0 + db_config: + type: postgres_config + connection_string: postgresql://postgres:password@localhost:5432/indexer diff --git a/processor/src/processors/confidential_asset/models/confidential_asset_events.rs b/processor/src/processors/confidential_asset/models/confidential_asset_events.rs index 7e625714..2a8ce176 100644 --- a/processor/src/processors/confidential_asset/models/confidential_asset_events.rs +++ b/processor/src/processors/confidential_asset/models/confidential_asset_events.rs @@ -36,7 +36,9 @@ pub type CompressedPubkey = serde_json::Value; /// `confidential_asset::Registered` #[derive(Debug, Clone, Deserialize, Serialize)] pub struct RegisteredEvent { + #[serde(skip_serializing)] pub addr: String, + #[serde(skip_serializing)] pub asset_type: String, /// Encryption key registered for this account/asset pair. pub ek: CompressedPubkey, @@ -45,8 +47,11 @@ pub struct RegisteredEvent { /// `confidential_asset::Deposited` #[derive(Debug, Clone, Deserialize, Serialize)] pub struct DepositedEvent { + #[serde(skip_serializing)] pub from: String, + #[serde(skip_serializing)] pub to: String, + #[serde(skip_serializing)] pub asset_type: String, /// Plaintext amount brought into the protocol (serialized as a string by the node). pub amount: serde_json::Value, @@ -57,8 +62,11 @@ pub struct DepositedEvent { /// `confidential_asset::Withdrawn` #[derive(Debug, Clone, Deserialize, Serialize)] pub struct WithdrawnEvent { + #[serde(skip_serializing)] pub from: String, + #[serde(skip_serializing)] pub to: String, + #[serde(skip_serializing)] pub asset_type: String, /// Plaintext amount taken out of the protocol (serialized as a string by the node). pub amount: serde_json::Value, @@ -69,8 +77,11 @@ pub struct WithdrawnEvent { /// `confidential_asset::Transferred` #[derive(Debug, Clone, Deserialize, Serialize)] pub struct TransferredEvent { + #[serde(skip_serializing)] pub from: String, + #[serde(skip_serializing)] pub to: String, + #[serde(skip_serializing)] pub asset_type: String, /// Encrypted transfer amount under the recipient key (four-chunk pending-balance layout). pub amount: CompressedBalance, @@ -89,7 +100,9 @@ pub struct TransferredEvent { /// `confidential_asset::Normalized` #[derive(Debug, Clone, Deserialize, Serialize)] pub struct NormalizedEvent { + #[serde(skip_serializing)] pub addr: String, + #[serde(skip_serializing)] pub asset_type: String, /// New available balance ciphertext after re-encryption to normalize chunk bounds. pub new_available_balance: CompressedBalance, @@ -98,7 +111,9 @@ pub struct NormalizedEvent { /// `confidential_asset::RolledOver` #[derive(Debug, Clone, Deserialize, Serialize)] pub struct RolledOverEvent { + #[serde(skip_serializing)] pub addr: String, + #[serde(skip_serializing)] pub asset_type: String, /// New available balance ciphertext after the pending balance was rolled in. pub new_available_balance: CompressedBalance, @@ -107,7 +122,9 @@ pub struct RolledOverEvent { /// `confidential_asset::KeyRotated` #[derive(Debug, Clone, Deserialize, Serialize)] pub struct KeyRotatedEvent { + #[serde(skip_serializing)] pub addr: String, + #[serde(skip_serializing)] pub asset_type: String, /// The new encryption key after rotation. pub new_ek: CompressedPubkey, @@ -118,7 +135,9 @@ pub struct KeyRotatedEvent { /// `confidential_asset::FreezeChanged` #[derive(Debug, Clone, Deserialize, Serialize)] pub struct FreezeChangedEvent { + #[serde(skip_serializing)] pub addr: String, + #[serde(skip_serializing)] pub asset_type: String, /// `true` = incoming transfers paused; `false` = resumed. pub frozen: bool, @@ -134,6 +153,7 @@ pub struct AllowListChangedEvent { /// `confidential_asset::TokenAllowChanged` #[derive(Debug, Clone, Deserialize, Serialize)] pub struct TokenAllowChangedEvent { + #[serde(skip_serializing)] pub asset_type: String, /// `true` = confidential transfers permitted for this token; `false` = disabled. pub allowed: bool, @@ -142,6 +162,7 @@ pub struct TokenAllowChangedEvent { /// `confidential_asset::AuditorChanged` #[derive(Debug, Clone, Deserialize, Serialize)] pub struct AuditorChangedEvent { + #[serde(skip_serializing)] pub asset_type: String, /// New asset-specific auditor key, or `None` (as `{"vec":[]}`) when cleared. pub new_auditor_ek: serde_json::Value, From 903e62d97350f355bc8c9f6d1b1c0de14430f48f Mon Sep 17 00:00:00 2001 From: musitdev Date: Tue, 28 Apr 2026 17:03:32 +0200 Subject: [PATCH 3/3] correct clippy error --- .../src/diff_test_helper/confidential_asset_processor.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/integration-tests/src/diff_test_helper/confidential_asset_processor.rs b/integration-tests/src/diff_test_helper/confidential_asset_processor.rs index ad3de2a6..43b896ac 100644 --- a/integration-tests/src/diff_test_helper/confidential_asset_processor.rs +++ b/integration-tests/src/diff_test_helper/confidential_asset_processor.rs @@ -5,6 +5,7 @@ use processor::schema::confidential_asset_activities::dsl::*; use serde_json::Value; use std::collections::HashMap; +#[allow(dead_code)] pub fn load_data(conn: &mut PgConnection) -> Result> { let rows = confidential_asset_activities .then_order_by(transaction_version.asc())