@@ -31,8 +31,10 @@ use namada_apps_lib::wallet::defaults::is_use_device;
3131use namada_apps_lib:: wallet:: { self , Alias } ;
3232use namada_core:: chain:: ChainId ;
3333use namada_core:: token:: NATIVE_MAX_DECIMAL_PLACES ;
34+ use namada_node:: tendermint_config:: TxIndexConfig ;
3435use namada_sdk:: address:: Address ;
3536use namada_sdk:: chain:: { ChainIdPrefix , Epoch } ;
37+ use namada_sdk:: tendermint_rpc:: Client ;
3638use namada_sdk:: time:: DateTimeUtc ;
3739use namada_sdk:: token;
3840use namada_test_utils:: TestWasms ;
@@ -2852,3 +2854,95 @@ fn test_genesis_manipulation() -> Result<()> {
28522854
28532855 Ok ( ( ) )
28542856}
2857+
2858+ #[ test]
2859+ fn comet_tx_indexer ( ) -> Result < ( ) > {
2860+ use namada_apps_lib:: config:: Config ;
2861+ use namada_sdk:: { tendermint, tendermint_rpc} ;
2862+
2863+ let test = Arc :: new ( setup:: network (
2864+ |genesis, base_dir : & _ | {
2865+ setup:: set_validators ( 1 , genesis, base_dir, |_| 0 , vec ! [ ] )
2866+ } ,
2867+ None ,
2868+ ) ?) ;
2869+
2870+ // Enable comet tx indexer
2871+ let update_config = |mut config : Config | {
2872+ config. ledger . cometbft . tx_index = TxIndexConfig {
2873+ indexer : namada_node:: tendermint_config:: TxIndexer :: Kv ,
2874+ } ;
2875+ config
2876+ } ;
2877+
2878+ let validator_base_dir = test. get_base_dir ( Who :: Validator ( 0 ) ) ;
2879+ let validator_config = update_config ( Config :: load (
2880+ & validator_base_dir,
2881+ & test. net . chain_id ,
2882+ None ,
2883+ ) ) ;
2884+ validator_config
2885+ . write ( & validator_base_dir, & test. net . chain_id , true )
2886+ . unwrap ( ) ;
2887+
2888+ set_ethereum_bridge_mode (
2889+ & test,
2890+ & test. net . chain_id ,
2891+ Who :: Validator ( 0 ) ,
2892+ ethereum_bridge:: ledger:: Mode :: Off ,
2893+ None ,
2894+ ) ;
2895+
2896+ // 1. Run the ledger node
2897+ let bg_ledger =
2898+ start_namada_ledger_node_wait_wasm ( & test, Some ( 0 ) , Some ( 40 ) ) ?
2899+ . background ( ) ;
2900+
2901+ let validator_rpc = get_actor_rpc ( & test, Who :: Validator ( 0 ) ) ;
2902+
2903+ // A token transfer tx args
2904+ let tx_args = apply_use_device ( vec ! [
2905+ "transparent-transfer" ,
2906+ "--source" ,
2907+ BERTHA ,
2908+ "--target" ,
2909+ ALBERT ,
2910+ "--token" ,
2911+ NAM ,
2912+ "--amount" ,
2913+ "1.01" ,
2914+ "--signing-keys" ,
2915+ BERTHA_KEY ,
2916+ "--node" ,
2917+ & validator_rpc,
2918+ ] ) ;
2919+ let mut client = run ! ( * test, Bin :: Client , tx_args, Some ( 80 ) ) ?;
2920+ let expected = "CometBFT tx hash: " ;
2921+ let ( _unread, matched) = client. exp_regex ( & format ! ( "{expected}.*\n " ) ) ?;
2922+ let comet_tx_hash = matched. trim ( ) . split_once ( expected) . unwrap ( ) . 1 ;
2923+ client. assert_success ( ) ;
2924+
2925+ // Wait to commit a block
2926+ let mut ledger = bg_ledger. foreground ( ) ;
2927+ ledger. exp_regex ( r"Committed block hash.*, height: [0-9]+" ) ?;
2928+
2929+ // Check the tx result in Comet's indexer
2930+ let client = tendermint_rpc:: HttpClient :: builder (
2931+ tendermint_rpc:: HttpClientUrl :: from_str ( & validator_rpc) . unwrap ( ) ,
2932+ )
2933+ . compat_mode ( tendermint_rpc:: client:: CompatMode :: V0_38 )
2934+ . timeout ( std:: time:: Duration :: from_secs ( 30 ) )
2935+ . build ( )
2936+ . unwrap ( ) ;
2937+ let result = test
2938+ . async_runtime ( )
2939+ . block_on (
2940+ client
2941+ . tx ( tendermint:: Hash :: from_str ( comet_tx_hash) . unwrap ( ) , false ) ,
2942+ )
2943+ . unwrap ( ) ;
2944+ assert ! ( result. tx_result. code. is_ok( ) ) ;
2945+ assert ! ( result. tx_result. gas_used > 0 ) ;
2946+
2947+ Ok ( ( ) )
2948+ }
0 commit comments