code: func (s *PublicTransactionPoolAPI) SendTransaction(ctx context.Context, args SendTxArgs) (common.Hash, error) {
  	// Look up the wallet containing the requested signer
  	account := accounts.Account{Address: args.From}
  
  	wallet, err := s.b.AccountManager().Find(account)
  	if err != nil {
  		return common.Hash{}, err
  	}
  
  	if args.Nonce == nil {
  		// Hold the addresse's mutex around signing to prevent concurrent assignment of
  		// the same nonce to multiple accounts.
  		s.nonceLock.LockAddr(args.From)
  		defer s.nonceLock.UnlockAddr(args.From)
  	}
  
  	// Set some sanity defaults and terminate on failure
  	if err := args.setDefaults(ctx, s.b); err != nil {
  		return common.Hash{}, err
  	}
  	// Assemble the transaction and sign with the wallet
  	tx := args.toTransaction()
  
  	signed, err := wallet.SignTx(account, tx, s.b.ChainConfig().ChainID)
  	if err != nil {
  		return common.Hash{}, err
  	}
  	return SubmitTransaction(ctx, s.b, signed)
  }
docs: // SendTransaction creates a transaction for the given argument, sign it and submit it to the
  // transaction pool.