From 05dd8f5a9165f2e499b0bacbb44c991e3abbb6b3 Mon Sep 17 00:00:00 2001
From: Feliciss <10203-feliciss@users.noreply.0xacab.org>
Date: Mon, 16 Sep 2024 00:00:19 +0900
Subject: [PATCH] [gh-2287] refactor transaction_validator.move.

---
 .../src/tests/session_validator_tests.rs      |   2 -
 .../sources/transaction_validator.move        | 139 +++++++-----------
 2 files changed, 55 insertions(+), 86 deletions(-)

diff --git a/crates/rooch-framework-tests/src/tests/session_validator_tests.rs b/crates/rooch-framework-tests/src/tests/session_validator_tests.rs
index a2fccbc2e2..227d1a6bc9 100644
--- a/crates/rooch-framework-tests/src/tests/session_validator_tests.rs
+++ b/crates/rooch-framework-tests/src/tests/session_validator_tests.rs
@@ -2,7 +2,6 @@
 // SPDX-License-Identifier: Apache-2.0
 
 use crate::binding_test;
-use bitcoin::hex::DisplayHex;
 use move_core_types::account_address::AccountAddress;
 use move_core_types::ident_str;
 use move_core_types::language_storage::ModuleId;
@@ -11,7 +10,6 @@ use move_core_types::vm_status::{AbortLocation, KeptVMStatus, VMStatus};
 use moveos_types::module_binding::MoveFunctionCaller;
 use moveos_types::move_std::string::MoveString;
 use moveos_types::move_types::FunctionId;
-use moveos_types::state::MoveState;
 use moveos_types::{module_binding::ModuleBinding, transaction::MoveAction};
 use rooch_key::keystore::account_keystore::AccountKeystore;
 use rooch_key::keystore::memory_keystore::InMemKeystore;
diff --git a/frameworks/rooch-framework/sources/transaction_validator.move b/frameworks/rooch-framework/sources/transaction_validator.move
index 50616f3347..8439a3fa18 100644
--- a/frameworks/rooch-framework/sources/transaction_validator.move
+++ b/frameworks/rooch-framework/sources/transaction_validator.move
@@ -23,10 +23,10 @@ module rooch_framework::transaction_validator {
     use rooch_framework::address_mapping;
     use rooch_framework::account_coin_store;
     use rooch_framework::builtin_validators;
-    // use rooch_framework::bitcoin_address;
-    // use std::vector;
-    // use std::string;
-    // use std::bcs;
+    use rooch_framework::bitcoin_address;
+    use std::vector;
+    use std::string;
+    use std::bcs;
 
     const MAX_U64: u128 = 18446744073709551615;
 
@@ -180,84 +180,55 @@ module rooch_framework::transaction_validator {
         };
     }
 
-    // #[test]
-    // fun test_validate_success() {
-    //     // chain id
-    //     let chain_id = 3;
-    //     std::debug::print(&chain_id);
-    //     // auth validator id
-    //     let session_validator_id = session_validator::auth_validator_id();
-    //     std::debug::print(&session_validator_id);
-    //     // let bitcoin_validator_id = bitcoin_validator::auth_validator_id();
-    //     let authenticator_payload = vector::empty<u8>();
-    //     // bytes: [55, 20, 57, 24, 237, 39, 212, 99, 80, 253, 158, 152, 69, 44, 186, 5, 149, 156, 255, 112, 63, 122, 253, 78, 174, 126, 212, 106, 62, 176, 54, 107]
-    //     vector::push_back(&mut authenticator_payload, 55);
-    //     vector::push_back(&mut authenticator_payload, 20);
-    //     vector::push_back(&mut authenticator_payload, 57);
-    //     vector::push_back(&mut authenticator_payload, 24);
-    //     vector::push_back(&mut authenticator_payload, 237);
-    //     vector::push_back(&mut authenticator_payload, 39);
-    //     vector::push_back(&mut authenticator_payload, 212);
-    //     vector::push_back(&mut authenticator_payload, 99);
-    //     vector::push_back(&mut authenticator_payload, 80);
-    //     vector::push_back(&mut authenticator_payload, 253);
-    //     vector::push_back(&mut authenticator_payload, 158);
-    //     vector::push_back(&mut authenticator_payload, 152);
-    //     vector::push_back(&mut authenticator_payload, 69);
-    //     vector::push_back(&mut authenticator_payload, 44);
-    //     vector::push_back(&mut authenticator_payload, 186);
-    //     vector::push_back(&mut authenticator_payload, 5);
-    //     vector::push_back(&mut authenticator_payload, 149);
-    //     vector::push_back(&mut authenticator_payload, 156);
-    //     vector::push_back(&mut authenticator_payload, 255);
-    //     vector::push_back(&mut authenticator_payload, 112);
-    //     vector::push_back(&mut authenticator_payload, 63);
-    //     vector::push_back(&mut authenticator_payload, 122);
-    //     vector::push_back(&mut authenticator_payload, 253);
-    //     vector::push_back(&mut authenticator_payload, 78);
-    //     vector::push_back(&mut authenticator_payload, 174);
-    //     vector::push_back(&mut authenticator_payload, 126);
-    //     vector::push_back(&mut authenticator_payload, 212);
-    //     vector::push_back(&mut authenticator_payload, 106);
-    //     vector::push_back(&mut authenticator_payload, 62);
-    //     vector::push_back(&mut authenticator_payload, 176);
-    //     vector::push_back(&mut authenticator_payload, 54);
-    //     vector::push_back(&mut authenticator_payload, 107);
-    //     std::debug::print(&authenticator_payload);
-    //     rooch_framework::genesis::init_for_test();
-
-    //     // session key
-    //     let sender_addr = tx_context::sender();
-    //     let sender = moveos_std::account::create_signer_for_testing(sender_addr);
-    //     let scope = session_key::new_session_scope(@0x1, std::string::utf8(b"*"), std::string::utf8(b"*"));
-    //     let authentication_key = bcs::to_bytes(&sender_addr);
-    //     let max_inactive_interval = 10;
-    //     let app_name = std::string::utf8(b"test");
-    //     let app_url = std::string::utf8(b"https://test.rooch.network");
-    //     session_key::create_session_key(&sender, app_name, app_url,  authentication_key, vector::singleton(scope), max_inactive_interval);
-
-    //     // validate function
-    //     // TODO: let scheme = vector::borrow(authenticator_payload, 0);
-    //     let tx_validate_result = validate(chain_id, session_validator_id, authenticator_payload);
-    //     std::debug::print(&tx_validate_result);
-
-    //     let id = 1;
-    //     let module_address = @000000000003;
-    //     let module_name = string::utf8(b"rooch_framework::empty");
-    //     let expected_auth_validator = auth_validator::new_auth_validator(id, module_address, module_name);
-    //     std::debug::print(&expected_auth_validator);
-    //     let expected_session_key = vector::empty<u8>();
-    //     let expected_bitcoin_addr = bitcoin_address::from_string(&string::utf8(b"bc1p72fvqwm9w4wcsd205maky9qejf6dwa6qeku5f5vnu4phpp3vvpws0p2f4g"));
-    //     std::debug::print(&expected_bitcoin_addr);
-
-    //     let auth_validator_id = 1;
-    //     let auth_validator = option::some(expected_auth_validator);
-    //     let session_key = option::some(expected_session_key);
-    //     let bitcoin_address = expected_bitcoin_addr;
-
-    //     let expected_tx_validate_result = auth_validator::new_tx_validate_result(auth_validator_id, auth_validator, session_key, bitcoin_address);
-    //     std::debug::print(&expected_tx_validate_result);
-
-    //     assert!(tx_validate_result == expected_tx_validate_result, 1000);
-    // }
+    // TODO: tx validator test
+    #[test]
+    fun test_validate_success() {
+        // chain id
+        let chain_id = 3;
+        std::debug::print(&chain_id);
+        // auth validator id
+        let session_validator_id = session_validator::auth_validator_id();
+        std::debug::print(&session_validator_id);
+        let authenticator_payload = x"008b91427a5eaea2970a093a5a996a947fd7073d0155eaf85db9367715572662b20ddeb9fbb56a3d2a9ebd9d41c8cfc0089e7f7c6b2b2da954c4764527a8a2bd077495252f4c098ae79597de12da55e446256953a5a05d95e54adcd5e1e561cbe0";
+        std::debug::print(&authenticator_payload);
+        rooch_framework::genesis::init_for_test();
+
+        // session key
+        let sender_addr = tx_context::sender();
+        let sender = moveos_std::account::create_signer_for_testing(sender_addr);
+        let scope = session_key::new_session_scope(@0x1, std::string::utf8(b"*"), std::string::utf8(b"*"));
+        let authentication_key = bcs::to_bytes(&sender_addr);
+        let max_inactive_interval = 10;
+        let app_name = std::string::utf8(b"test");
+        let app_url = std::string::utf8(b"https://test.rooch.network");
+        session_key::create_session_key(&sender, app_name, app_url,  authentication_key, vector::singleton(scope), max_inactive_interval);
+        let session_key_opt = session_key::get_session_key(sender_addr, authentication_key);
+        assert!(option::is_some(&session_key_opt), 1000);
+
+        // session validator
+        
+
+        // validate function
+        let tx_validate_result = validate(chain_id, session_validator_id, authenticator_payload);
+        std::debug::print(&tx_validate_result);
+
+        let id = 1;
+        let module_address = @000000000003;
+        let module_name = string::utf8(b"rooch_framework::empty");
+        let expected_auth_validator = auth_validator::new_auth_validator(id, module_address, module_name);
+        std::debug::print(&expected_auth_validator);
+        let expected_session_key = vector::empty<u8>();
+        let expected_bitcoin_addr = bitcoin_address::from_string(&string::utf8(b"bc1p72fvqwm9w4wcsd205maky9qejf6dwa6qeku5f5vnu4phpp3vvpws0p2f4g"));
+        std::debug::print(&expected_bitcoin_addr);
+
+        let auth_validator_id = 1;
+        let auth_validator = option::some(expected_auth_validator);
+        let session_key = option::some(expected_session_key);
+        let bitcoin_address = expected_bitcoin_addr;
+
+        let expected_tx_validate_result = auth_validator::new_tx_validate_result(auth_validator_id, auth_validator, session_key, bitcoin_address);
+        std::debug::print(&expected_tx_validate_result);
+
+        assert!(tx_validate_result == expected_tx_validate_result, 1000);
+    }
 }