@abstract-foundation/agw-client
Version:
Abstract Global Wallet Client SDK
142 lines (104 loc) • 4.08 kB
Markdown
The `@abstract-foundation/agw-client` package provides the core client library for interacting with the [Abstract Global Wallet (AGW)](https://docs.abs.xyz/overview).
## Abstract Global Wallet (AGW)
[Abstract Global Wallet (AGW)](https://docs.abs.xyz/overview) is a cross-application [smart contract wallet](https://docs.abs.xyz/how-abstract-works/native-account-abstraction/smart-contract-wallets) that users can be used to interact with any application built on Abstract, powered by Abstract's [native account abstraction](https://docs.abs.xyz/how-abstract-works/native-account-abstraction).
## Installation
Install the core client library via NPM:
```bash
npm install @abstract-foundation/agw-client
```
## Quick Start
### Importing
```tsx
import { createAbstractClient } from '@abstract-foundation/agw-client'
```
```tsx
import { createAbstractClient } from '@abstract-foundation/agw-client';
import { ChainEIP712, http } from 'viem';
import { Account } from 'viem/accounts';
// Assume you have a signer account and chain configuration
const signer: Account = {
address: '0xYourSignerAddress',
// ...other account properties
};
(async () => {
const abstractClient = await createAbstractClient({
signer,
chain,
transport: http(), // optional, defaults to HTTP transport if omitted
});
// Use the abstractClient instance
})();
```
Asynchronously creates an `AbstractClient` instance, extending the standard `Client` with actions specific to the Abstract Global Wallet.
```tsx
import { createAbstractClient } from '@abstract-foundation/agw-client';
(async () => {
const abstractClient = await createAbstractClient({
signer: /* your signer account */,
chain: /* your chain configuration */,
});
// Use abstractClient to interact with the blockchain
})();
```
```tsx
import { createAbstractClient } from '@abstract-foundation/agw-client';
(async () => {
const abstractClient = await createAbstractClient({
signer: /* your signer account */,
chain: /* your chain configuration */,
});
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);
}
})();
```
```tsx
import { createAbstractClient } from '@abstract-foundation/agw-client';
import { ChainEIP712, http } from 'viem';
import { Account } from 'viem/accounts';
(async () => {
// Create a signer account and chain configuration
const signer: Account = {
address: '0xYourSignerAddress',
// ...other account properties
};
// Create an instance of Abstract Client
const abstractClient = await createAbstractClient({
signer,
chain,
transport: http(), // Optional, defaults to HTTP transport if omitted
});
// Example of a sponsored transaction using a Paymaster
try {
const txHash = await abstractClient.sendTransaction({
to: '0xRecipientAddress',
value: 1000000000000000000n, // 1 ETH in wei
sponsor: {
paymaster: '0xPaymasterAddress', // Address of the Paymaster contract
},
});
console.log('Sponsored Transaction Hash:', txHash);
} catch (error) {
console.error('Error sending sponsored transaction:', error);
}
})();
```
- **Paymaster**: The `paymaster` object is specified in the `sendTransaction` method, allowing the Paymaster contract to cover the gas fees for the transaction.
- **Sponsored Transaction**: The transaction fee is covered by the Paymaster, so the user’s balance is unaffected by gas costs.
For detailed documentation, please refer to the [Abstract Global Wallet Documentation](https://docs.abs.xyz/how-abstract-works/abstract-global-wallet/overview).