diff --git a/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_duplicated_keyless_multi_ed_txn/public_key_auth_keys.json b/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_duplicated_keyless_multi_ed_txn/public_key_auth_keys.json index 5aee90e1..cfca0fc4 100644 --- a/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_duplicated_keyless_multi_ed_txn/public_key_auth_keys.json +++ b/integration-tests/sdk_expected_db_output_files/account_restoration_processor/test_duplicated_keyless_multi_ed_txn/public_key_auth_keys.json @@ -3,27 +3,27 @@ "public_key": "0x557b540c9347b8215962ac70c7b153dfd7865ae7348633d16343d1743d923a07", "public_key_type": "ed25519", "auth_key": "0xdd42f7a9b239c55e0e5bd0600eb6cfb03f6b162a37a7868f74317bb498ee269b", - "account_public_key": "0xdc9da6abd59694d9d5699b4ec6e24fe18bfc08cfb68b1f0f1b73b58f1753ab6f557b540c9347b8215962ac70c7b153dfd7865ae7348633d16343d1743d923a07aa90e0d9d16b63ba4a289fb0dc8d1b450000000000000000000000000000000002", "is_public_key_used": true, "last_transaction_version": 3091258105, - "signature_type": "multi_ed25519_signature" + "signature_type": "multi_ed25519_signature", + "account_public_key": "0xdc9da6abd59694d9d5699b4ec6e24fe18bfc08cfb68b1f0f1b73b58f1753ab6f557b540c9347b8215962ac70c7b153dfd7865ae7348633d16343d1743d923a07aa90e0d9d16b63ba4a289fb0dc8d1b450000000000000000000000000000000002" }, { "public_key": "0xaa90e0d9d16b63ba4a289fb0dc8d1b4500000000000000000000000000000000", "public_key_type": "ed25519", "auth_key": "0xdd42f7a9b239c55e0e5bd0600eb6cfb03f6b162a37a7868f74317bb498ee269b", - "account_public_key": "0xdc9da6abd59694d9d5699b4ec6e24fe18bfc08cfb68b1f0f1b73b58f1753ab6f557b540c9347b8215962ac70c7b153dfd7865ae7348633d16343d1743d923a07aa90e0d9d16b63ba4a289fb0dc8d1b450000000000000000000000000000000002", "is_public_key_used": false, "last_transaction_version": 3091258105, - "signature_type": "multi_ed25519_signature" + "signature_type": "multi_ed25519_signature", + "account_public_key": "0xdc9da6abd59694d9d5699b4ec6e24fe18bfc08cfb68b1f0f1b73b58f1753ab6f557b540c9347b8215962ac70c7b153dfd7865ae7348633d16343d1743d923a07aa90e0d9d16b63ba4a289fb0dc8d1b450000000000000000000000000000000002" }, { "public_key": "0xdc9da6abd59694d9d5699b4ec6e24fe18bfc08cfb68b1f0f1b73b58f1753ab6f", "public_key_type": "ed25519", "auth_key": "0xdd42f7a9b239c55e0e5bd0600eb6cfb03f6b162a37a7868f74317bb498ee269b", - "account_public_key": "0xdc9da6abd59694d9d5699b4ec6e24fe18bfc08cfb68b1f0f1b73b58f1753ab6f557b540c9347b8215962ac70c7b153dfd7865ae7348633d16343d1743d923a07aa90e0d9d16b63ba4a289fb0dc8d1b450000000000000000000000000000000002", "is_public_key_used": true, "last_transaction_version": 3091258105, - "signature_type": "multi_ed25519_signature" + "signature_type": "multi_ed25519_signature", + "account_public_key": "0xdc9da6abd59694d9d5699b4ec6e24fe18bfc08cfb68b1f0f1b73b58f1753ab6f557b540c9347b8215962ac70c7b153dfd7865ae7348633d16343d1743d923a07aa90e0d9d16b63ba4a289fb0dc8d1b450000000000000000000000000000000002" } ] \ No newline at end of file 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/user_transaction_processor/test_account_abstraction_authenticator/signatures.json b/integration-tests/sdk_expected_db_output_files/user_transaction_processor/test_account_abstraction_authenticator/signatures.json new file mode 100644 index 00000000..11ae9f66 --- /dev/null +++ b/integration-tests/sdk_expected_db_output_files/user_transaction_processor/test_account_abstraction_authenticator/signatures.json @@ -0,0 +1,17 @@ +[ + { + "transaction_version": 6616059810, + "multi_agent_index": 0, + "multi_sig_index": 0, + "transaction_block_height": 427367446, + "signer": "0x272c396814beae314a32108c27ff33d845b064b667bde67483e5c6572c8dcf80", + "is_sender_primary": true, + "type_": "abstraction_signature", + "public_key": "Not implemented", + "signature": "{\"function_info\":\"2224bfd56ed53e05b4a32820fe61b88c06c9b25d767a4759a1d758a1ef92759c::authenticator::authenticate\",\"signature\":\"0x0020abe1876ff31ed9ba8a379a636d0980944cf7beee2f5591bd90d88dac165b3c990b68656c6c6f20776f726c64\"}", + "threshold": 1, + "public_key_indices": [], + "public_key_type": null, + "any_signature_type": null + } +] \ No newline at end of file diff --git a/integration-tests/sdk_expected_db_output_files/user_transaction_processor/test_account_abstraction_authenticator/user_transactions.json b/integration-tests/sdk_expected_db_output_files/user_transaction_processor/test_account_abstraction_authenticator/user_transactions.json new file mode 100644 index 00000000..4e4567d0 --- /dev/null +++ b/integration-tests/sdk_expected_db_output_files/user_transaction_processor/test_account_abstraction_authenticator/user_transactions.json @@ -0,0 +1,19 @@ +[ + { + "version": 6616059810, + "block_height": 427367446, + "parent_signature_type": "single_sender_signature", + "sender": "0x272c396814beae314a32108c27ff33d845b064b667bde67483e5c6572c8dcf80", + "sequence_number": 1, + "max_gas_amount": "200000", + "expiration_timestamp_secs": "2025-02-07T07:34:44", + "gas_unit_price": "100", + "timestamp": "2025-02-07T07:34:24.075953", + "entry_function_id_str": "0x1::aptos_account::transfer", + "replay_protection_nonce": null, + "epoch": 21599, + "entry_function_contract_address": "0x0000000000000000000000000000000000000000000000000000000000000001", + "entry_function_module_name": "aptos_account", + "entry_function_function_name": "transfer" + } +] \ No newline at end of file diff --git a/integration-tests/src/sdk_tests/user_transaction_processor_tests.rs b/integration-tests/src/sdk_tests/user_transaction_processor_tests.rs index b3933bb5..6c85c534 100644 --- a/integration-tests/src/sdk_tests/user_transaction_processor_tests.rs +++ b/integration-tests/src/sdk_tests/user_transaction_processor_tests.rs @@ -66,6 +66,7 @@ mod sdk_user_txn_processor_tests { IMPORTED_MAINNET_TXNS_590098441_USER_TXN_SINGLE_SENDER_ED25519, IMPORTED_MAINNET_TXNS_685_USER_TXN_ED25519, IMPORTED_MAINNET_TXNS_976087151_USER_TXN_SINGLE_SENDER_KEYLESS, + IMPORTED_TESTNET_TXNS_6616059810_ACCOUNT_ABSTRACTION_AUTHENTICATOR, IMPORTED_TESTNET_TXNS_769222973_MULTISIG, }; use processor::processors::user_transaction::user_transaction_processor::UserTransactionProcessor; @@ -160,6 +161,15 @@ mod sdk_user_txn_processor_tests { .await; } + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_account_abstraction_authenticator() { + process_single_transactions( + IMPORTED_TESTNET_TXNS_6616059810_ACCOUNT_ABSTRACTION_AUTHENTICATOR, + Some("test_account_abstraction_authenticator".to_string()), + ) + .await; + } + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_multi_agent() { process_single_transactions( diff --git a/processor/src/config/processor_config.rs b/processor/src/config/processor_config.rs index 9637f5db..f9064a6a 100644 --- a/processor/src/config/processor_config.rs +++ b/processor/src/config/processor_config.rs @@ -166,8 +166,7 @@ impl ProcessorConfig { if default_config.backfill_table.is_empty() { Ok(valid_table_names .iter() - .cloned() - .map(|table_name| format_table_name(processor_name, &table_name)) + .map(|table_name| format_table_name(processor_name, table_name)) .collect()) } else { Self::validate_backfill_table_names(&default_config.backfill_table, valid_table_names) diff --git a/processor/src/processors/user_transaction/models/signature_utils/account_signature_utils.rs b/processor/src/processors/user_transaction/models/signature_utils/account_signature_utils.rs index 24109bc2..30e6837a 100644 --- a/processor/src/processors/user_transaction/models/signature_utils/account_signature_utils.rs +++ b/processor/src/processors/user_transaction/models/signature_utils/account_signature_utils.rs @@ -10,12 +10,19 @@ use crate::processors::user_transaction::models::signatures::Signature; use aptos_indexer_processor_sdk::{ aptos_protos::transaction::v1::{ account_signature::{Signature as AccountSignatureEnum, Type as AccountSignatureTypeEnum}, - AccountSignature, MultiKeySignature, SingleKeySignature, + AbstractionSignature, AccountSignature, MultiKeySignature, SingleKeySignature, }, utils::convert::standardize_address, }; +use serde::Serialize; use tracing::warn; +#[derive(Clone, Debug, Serialize)] +struct AbstractSignature { + function_info: String, + signature: String, +} + /// This is the second layer of the signature proto. It's the start of the signatures table. pub fn get_account_signature_type(account_signature: &AccountSignature) -> String { get_account_signature_type_from_enum(&account_signature.r#type()) @@ -104,8 +111,9 @@ pub fn from_account_signature( override_address, block_timestamp, ), - AccountSignatureEnum::Abstraction(_sig) => { + AccountSignatureEnum::Abstraction(sig) => { vec![parse_abstraction_signature( + sig, &account_signature_type, sender, transaction_version, @@ -211,6 +219,7 @@ pub fn get_public_key_indices_from_multi_key_signature(s: &MultiKeySignature) -> } pub fn parse_abstraction_signature( + s: &AbstractionSignature, account_signature_type: &str, sender: &String, transaction_version: i64, @@ -233,7 +242,11 @@ pub fn parse_abstraction_signature( public_key: "Not implemented".into(), threshold: 1, public_key_indices: serde_json::Value::Array(vec![]), - signature: "Not implemented".into(), + signature: serde_json::to_string(&AbstractSignature { + function_info: s.function_info.clone(), + signature: format!("0x{}", hex::encode(s.signature.as_slice())), + }) + .unwrap_or_else(|_| "Parsing abstraction signature failed".into()), multi_agent_index, multi_sig_index: 0, }