> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abs.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# useGlobalWalletSignerClient

> Hook to get a wallet client instance of the approved signer of the connected Abstract Global Wallet.

Use the `useGlobalWalletSignerClient` hook to get a [wallet client](https://viem.sh/docs/clients/wallet)
instance that can perform actions from the underlying [EOA](https://ethereum.org/en/developers/docs/accounts/#types-of-account)
approved to sign transactions for the Abstract Global Wallet smart contract.

This hook is different from [useAbstractClient](/abstract-global-wallet/agw-react/hooks/useAbstractClient), which
performs actions (e.g. sending a transaction) from the Abstract Global Wallet smart contract itself, not the EOA approved to sign transactions for it.

It uses wagmi’s [useWalletClient](https://wagmi.sh/react/api/hooks/useWalletClient) hook under the hood, returning
a [wallet client](https://viem.sh/docs/clients/wallet) instance with the `account` set as the approved EOA of the Abstract Global Wallet.

## Import

```tsx theme={null}
import { useGlobalWalletSignerClient } from "@abstract-foundation/agw-react";
```

## Usage

```tsx theme={null}
import { useGlobalWalletSignerClient } from "@abstract-foundation/agw-react";

export default function App() {
  const { data: client, isLoading, error } = useGlobalWalletSignerClient();

  // Use the client to perform actions such as sending transactions or deploying contracts
  async function submitTx() {
    if (!client) return;

    const hash = await client.sendTransaction({
      to: "0x8e729E23CDc8bC21c37a73DA4bA9ebdddA3C8B6d",
      data: "0x69",
    });
  }

  // ... rest of your component ...
}
```

## Returns

Returns a `UseQueryResult<UseWalletClientReturnType, Error>`.

See [wagmi's useWalletClient](https://wagmi.sh/react/api/hooks/useWalletClient) for more information.

<Expandable title="properties">
  <ResponseField name="data" type="UseWalletClientReturnType | undefined">
    The wallet client instance connected to the approved signer of the connected
    Abstract Global Wallet.
  </ResponseField>

  <ResponseField name="dataUpdatedAt" type="number">
    The timestamp for when the query most recently returned the status as
    'success'.
  </ResponseField>

  <ResponseField name="error" type="null | Error">
    The error object for the query, if an error was thrown. Defaults to null.
  </ResponseField>

  <ResponseField name="errorUpdatedAt" type="number">
    The timestamp for when the query most recently returned the status as 'error'.
  </ResponseField>

  <ResponseField name="errorUpdateCount" type="number">
    The sum of all errors.
  </ResponseField>

  <ResponseField name="failureCount" type="number">
    The failure count for the query. Incremented every time the query fails. Reset
    to 0 when the query succeeds.
  </ResponseField>

  <ResponseField name="failureReason" type="null | Error">
    The failure reason for the query retry. Reset to null when the query succeeds.
  </ResponseField>

  <ResponseField name="fetchStatus" type="'fetching' | 'idle' | 'paused'">
    * fetching: Is true whenever the queryFn is executing, which includes initial
      pending state as well as background refetches. - paused: The query wanted to fetch,
      but has been paused. - idle: The query is not fetching. See Network Mode for
      more information.
  </ResponseField>

  <ResponseField name="isError / isPending / isSuccess" type="boolean">
    Boolean variables derived from status.
  </ResponseField>

  <ResponseField name="isFetched" type="boolean">
    Will be true if the query has been fetched.
  </ResponseField>

  <ResponseField name="isFetchedAfterMount" type="boolean">
    Will be true if the query has been fetched after the component mounted. This
    property can be used to not show any previously cached data.
  </ResponseField>

  <ResponseField name="isFetching / isPaused" type="boolean">
    Boolean variables derived from fetchStatus.
  </ResponseField>

  <ResponseField name="isLoading" type="boolean">
    Is `true` whenever the first fetch for a query is in-flight. Is the same as
    `isFetching && isPending`.
  </ResponseField>

  <ResponseField name="isLoadingError" type="boolean">
    Will be `true` if the query failed while fetching for the first time.
  </ResponseField>

  <ResponseField name="isPlaceholderData" type="boolean">
    Will be `true` if the data shown is the placeholder data.
  </ResponseField>

  <ResponseField name="isRefetchError" type="boolean">
    Will be `true` if the query failed while refetching.
  </ResponseField>

  <ResponseField name="isRefetching" type="boolean">
    Is true whenever a background refetch is in-flight, which does not include
    initial `pending`. Is the same as `isFetching && !isPending`.
  </ResponseField>

  <ResponseField name="isStale" type="boolean">
    Will be `true` if the data in the cache is invalidated or if the data is older
    than the given staleTime.
  </ResponseField>

  <ResponseField name="refetch" type="(options?: {cancelRefetch?: boolean}) => Promise<QueryObserverResult<AbstractClient, Error>>">
    A function to manually refetch the query.

    * `cancelRefetch`: When set to `true`, a
      currently running request will be canceled before a new request is made. When
      set to false, no refetch will be made if there is already a request running. Defaults to `true`.
  </ResponseField>

  <ResponseField name="status" type="'error' | 'pending' | 'success'">
    * `pending`: if there's no cached data and no query attempt was finished yet.
    * `error`: if the query attempt resulted in an error. The corresponding error
      property has the error received from the attempted fetch.
    * `success`: if the query has received a response with no errors and is ready to display its data.

      The corresponding data property on the query is the data received from the
      successful fetch or if the query's enabled property is set to false and has not been fetched
      yet, data is the first initialData supplied to the query on initialization.
  </ResponseField>
</Expandable>
