@@ -347,6 +347,122 @@ func TestTxWorkerSetup(t *testing.T) {
347347 require .NoError (t , err )
348348}
349349
350+ // TestSubmitFromDefaultAccountWithoutTxWorkers ensures users can submit transactions
351+ // bypassing the queue from the default account
352+ func TestSubmitFromDefaultAccountWithoutTxWorkers (t * testing.T ) {
353+ ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Minute )
354+ t .Cleanup (cancel )
355+
356+ accounts := []string {
357+ "jimmy" , "carl" , "sheen" , "cindy" ,
358+ }
359+
360+ config := testnode .DefaultConfig ().
361+ WithChainID (chainID ).
362+ WithFundedAccounts (accounts ... ).
363+ WithDelayedPrecommitTimeout (time .Millisecond )
364+
365+ cctx , _ , grpcAddr := testnode .NewNetwork (t , config )
366+ conn , err := grpc .NewClient (grpcAddr , grpc .WithTransportCredentials (insecure .NewCredentials ()))
367+ require .NoError (t , err )
368+
369+ // configured without txworkers
370+ ca , err := NewCoreAccessor (cctx .Keyring , accounts [0 ], localHeader {cctx .Client }, conn , chainID , nil )
371+ require .NoError (t , err )
372+ err = ca .Start (ctx )
373+ require .NoError (t , err )
374+
375+ randBlob , err := libshare .GenerateV0Blobs ([]int {8 }, false )
376+ require .NoError (t , err )
377+
378+ nonDefaultAcct , err := cctx .Keyring .Key (accounts [3 ])
379+ require .NoError (t , err )
380+ addr , err := nonDefaultAcct .GetAddress ()
381+ require .NoError (t , err )
382+
383+ // check bals of accounts before tx (TODO @renaynay: hack til we get signer in txresp)
384+ sdkAddress , err := sdktypes .AccAddressFromHexUnsafe (fmt .Sprintf ("%X" , addr .Bytes ()))
385+ require .NoError (t , err )
386+ balNonDefault , err := ca .BalanceForAddress (ctx , Address {sdkAddress })
387+ require .NoError (t , err )
388+ balDefault , err := ca .Balance (ctx )
389+ require .NoError (t , err )
390+
391+ // default tx config (submit from default acct)
392+ _ , err = ca .SubmitPayForBlob (ctx , randBlob , NewTxConfig ())
393+ require .NoError (t , err )
394+
395+ // ensure balance has remained the same for non-default account
396+ updatedBalNonDefault , err := ca .BalanceForAddress (ctx , Address {sdkAddress })
397+ require .NoError (t , err )
398+ require .True (t , updatedBalNonDefault .Amount .Equal (balNonDefault .Amount ))
399+
400+ // ensure balance decreased for default account
401+ updatedBalDefault , err := ca .Balance (ctx )
402+ require .NoError (t , err )
403+ require .True (t , updatedBalDefault .Amount .LT (balDefault .Amount ))
404+
405+ // TODO @renaynay: once tx response contains signer, check signer here
406+ }
407+
408+ // TestSubmitFromCustomAccount ensures users can submit transactions
409+ // from a non-default account
410+ func TestSubmitFromCustomAccount (t * testing.T ) {
411+ ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Minute )
412+ t .Cleanup (cancel )
413+
414+ accounts := []string {
415+ "jimmy" , "carl" , "sheen" , "cindy" ,
416+ }
417+
418+ config := testnode .DefaultConfig ().
419+ WithChainID (chainID ).
420+ WithFundedAccounts (accounts ... ).
421+ WithDelayedPrecommitTimeout (time .Millisecond )
422+
423+ cctx , _ , grpcAddr := testnode .NewNetwork (t , config )
424+ conn , err := grpc .NewClient (grpcAddr , grpc .WithTransportCredentials (insecure .NewCredentials ()))
425+ require .NoError (t , err )
426+
427+ ca , err := NewCoreAccessor (cctx .Keyring , accounts [0 ], localHeader {cctx .Client }, conn , chainID , nil ,
428+ WithTxWorkerAccounts (8 ))
429+ require .NoError (t , err )
430+ err = ca .Start (ctx )
431+ require .NoError (t , err )
432+
433+ randBlob , err := libshare .GenerateV0Blobs ([]int {8 }, false )
434+ require .NoError (t , err )
435+
436+ nonDefaultAcct , err := cctx .Keyring .Key (accounts [3 ])
437+ require .NoError (t , err )
438+ addr , err := nonDefaultAcct .GetAddress ()
439+ require .NoError (t , err )
440+
441+ // check bals of accounts before tx (TODO @renaynay: hack til we get signer in txresp)
442+ sdkAddress , err := sdktypes .AccAddressFromHexUnsafe (fmt .Sprintf ("%X" , addr .Bytes ()))
443+ require .NoError (t , err )
444+ balNonDefault , err := ca .BalanceForAddress (ctx , Address {sdkAddress })
445+ require .NoError (t , err )
446+ balDefault , err := ca .Balance (ctx )
447+ require .NoError (t , err )
448+
449+ txConf := NewTxConfig (WithSignerAddress (addr .String ()))
450+ _ , err = ca .SubmitPayForBlob (ctx , randBlob , txConf )
451+ require .NoError (t , err )
452+
453+ // ensure balance has decreased for non-default account
454+ updatedBalNonDefault , err := ca .BalanceForAddress (ctx , Address {sdkAddress })
455+ require .NoError (t , err )
456+ require .True (t , updatedBalNonDefault .Amount .LT (balNonDefault .Amount ))
457+
458+ // ensure balance remained same for default account
459+ updatedBalDefault , err := ca .Balance (ctx )
460+ require .NoError (t , err )
461+ require .True (t , updatedBalDefault .Equal (balDefault ))
462+
463+ // TODO @renaynay: once tx response contains signer, check signer here
464+ }
465+
350466func buildAccessor (t * testing.T , opts ... Option ) (* CoreAccessor , []string ) {
351467 t .Helper ()
352468 accounts := []string {
0 commit comments