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