1.8.5 • Published 8 months ago

@abstract-foundation/agw-react v1.8.5

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

@abstract-foundation/agw-react

The @abstract-foundation/agw-react package provides React hooks and components to integrate the Abstract Global Wallet (AGW) into your React applications.

Abstract Global Wallet (AGW)

Abstract Global Wallet (AGW) is a cross-application smart contract wallet that users can use to interact with any application built on Abstract, powered by Abstract's native account abstraction.

Installation

Install the React integration package via NPM:

npm install @abstract-foundation/agw-react

Quick Start

Importing

import { useAbstractClient, useLoginWithAbstract } from '@abstract-foundation/agw-react';

Using useLoginWithAbstract Hook

import React from 'react';
import { useLoginWithAbstract } from '@abstract-foundation/agw-react';

export default function App() {
  const { login, logout } = useLoginWithAbstract();

  return (
    <div>
      <button onClick={login}>Connect with Abstract</button>
      <button onClick={logout}>Disconnect</button>
    </div>
  );
}

Using useAbstractClient Hook

import React from 'react';
import { useAbstractClient } from '@abstract-foundation/agw-react';

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

  if (isLoading) return <div>Loading Abstract Client...</div>;
  if (error) return <div>Error: {error.message}</div>;

  // Use the abstractClient instance here
  return <div>Abstract Client is ready!</div>;
}

API Reference

  • useAbstractClient: Hook to create and access an instance of the Abstract Client within your React application.
  • useLoginWithAbstract: Hook for signing in and signing out users with the Abstract Global Wallet.
  • useGlobalWalletSignerAccount: Hook to retrieve the Global Wallet Signer's account information.
  • useGlobalWalletSignerClient: Hook to access the wallet client associated with the Global Wallet Signer's account.
  • useWriteContractSponsored: Hook to perform sponsored contract write operations.

Examples

Sending a Transaction

Using @abstract-foundation/agw-react to send a transaction:

import React from 'react';
import { useAbstractClient } from '@abstract-foundation/agw-react';

export default function SendTransactionButton() {
  const { data: abstractClient } = useAbstractClient();

  const handleSendTransaction = async () => {
    if (!abstractClient) return;

    try {
      const txHash = await abstractClient.sendTransaction({
        to: '0xRecipientAddress',
        value: 1000000000000000000n, // 1 ETH in wei
      });
      console.log('Transaction Hash:', txHash);
    } catch (error) {
      console.error('Error sending transaction:', error);
    }
  };

  return (
    <button onClick={handleSendTransaction} disabled={!abstractClient}>
      Send Transaction
    </button>
  );
}

Using useWriteContractSponsored

import React from 'react';
import { useWriteContractSponsored } from '@abstract-foundation/agw-react';
import { Abi } from 'viem';

const contractAbi: Abi = [/* Your contract ABI here */];

export default function SponsoredContractWrite() {
  const {
    writeContractSponsored,
    data,
    error,
    isLoading,
    isSuccess,
  } = useWriteContractSponsored();

  const handleWriteContract = () => {
    writeContractSponsored({
      address: '0xYourContractAddress',
      abi: contractAbi,
      functionName: 'yourFunctionName',
      args: ['arg1', 'arg2'],
    });
  };

  return (
    <div>
      <button onClick={handleWriteContract} disabled={isLoading}>
        {isLoading ? 'Processing...' : 'Execute Sponsored Transaction'}
      </button>
      {isSuccess && <div>Transaction Hash: {data?.hash}</div>}
      {error && <div>Error: {error.message}</div>}
    </div>
  );
}

Documentation

For detailed documentation, please refer to the Abstract Global Wallet Documentation.

1.2.0

1 year ago

1.0.2

1 year ago

1.7.0-beta.0

9 months ago

1.0.1

1 year ago

1.0.0

1 year ago

0.1.10

1 year ago

1.8.2

8 months ago

1.6.4

10 months ago

1.8.1

8 months ago

1.6.3

10 months ago

1.8.0

8 months ago

1.6.2

10 months ago

1.4.4

1 year ago

1.6.1

10 months ago

1.4.3

1 year ago

1.6.0

11 months ago

1.4.2

1 year ago

1.2.4

1 year ago

1.4.1

1 year ago

1.2.3

1 year ago

1.5.5-beta.1

11 months ago

1.4.0

1 year ago

1.2.2

1 year ago

1.5.5-beta.0

11 months ago

1.2.1

1 year ago

1.1.0-beta.2

1 year ago

0.1.0

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.8

1 year ago

0.1.7

1 year ago

0.1.9

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.6

1 year ago

0.1.5

1 year ago

1.1.0

1 year ago

1.7.3

9 months ago

1.5.5

11 months ago

1.7.2

9 months ago

1.5.4

12 months ago

1.7.1

9 months ago

1.5.3

12 months ago

1.7.0

9 months ago

1.5.2

12 months ago

1.5.6-beta.3

11 months ago

1.5.1

12 months ago

1.5.6-beta.4

11 months ago

1.5.0

12 months ago

1.5.6-beta.1

11 months ago

1.5.6-beta.2

11 months ago

1.3.0

1 year ago

1.5.0-beta.0

1 year ago

0.0.1-beta.21

1 year ago

0.0.1-beta.20

1 year ago

0.0.1-beta.22

1 year ago

1.0.0-beta.2

1 year ago

1.0.2-beta.1

1 year ago

1.0.0-beta.1

1 year ago

0.0.1-beta.10

1 year ago

1.5.6-beta.0

11 months ago

0.0.1-beta.12

1 year ago

0.0.1-beta.11

1 year ago

1.8.5

8 months ago

1.6.7

9 months ago

1.8.4

8 months ago

1.6.6

9 months ago

1.8.3

8 months ago

1.6.5

9 months ago

0.0.1-beta.18

1 year ago

0.0.1-beta.17

1 year ago

0.0.1-beta.19

1 year ago

0.0.1-beta.14

1 year ago

0.0.1-beta.13

1 year ago

0.0.1-beta.16

1 year ago

0.0.1-beta.15

1 year ago

0.0.1-beta.9

1 year ago

0.0.1-beta.7

1 year ago

0.0.1-beta.6

1 year ago

0.0.1-beta.8

1 year ago

0.0.1-beta.5

1 year ago

0.0.1-beta.4

1 year ago

0.0.1-beta.3

1 year ago

0.0.1-beta.2

1 year ago

0.0.1-beta.1

1 year ago