# SDK integration

## Installation

```bash
npm i aa-conla-sdk
```

NPM package link:

{% embed url="<https://www.npmjs.com/package/aa-conla-sdk>" %}

This package provides 2 APIs for using UserOperations:

* Low-level "walletAPI"
* High-level Provider

{% hint style="info" %}

```
Conla bundler
Entry point address: 0x3bFc49341Aae93e30F6e2BE5a7Fa371cEbd5bea4
Bundler rpc url: https://aa-bundler.conla.com/rpc
```

{% endhint %}

## LowLevel API

#### BaseWalletAPI

An abstract base-class to create UserOperation for a contract wallet.

### SimpleAccountAPI

An implementation of the BaseWalletAPI, for the SimpleWallet sample of account-abstraction.

```javascript
owner = provider.getSigner()
const dest = ethers.Wallet.createRandom()
const paymasterAPI = new PaymasterAPI(entryPointAddress, bundlerUrl)
const accountAPI = new SimpleAccountAPI({
  provider: provider,
  entryPointAddress: entryPointAddress,
  owner: owner,
  factoryAddress: factoryAddress,
  paymasterAPI: paymasterAPI,
})

const gasPrice = await provider.getGasPrice()
const value = parseEther('0.1')

const op = await accountAPI.createSignedUserOp({
  target: dest.address,
  data: "0x",
  value: value,
  maxFeePerGas: gasPrice,
  maxPriorityFeePerGas: gasPrice,
})

const packeUserOp = await packUserOp(op)

const tx = await accountAPI.sendHandlerOps([packeUserOp])
console.log("tx hash: ", tx.hash)
```

### High-Level Provider API

A simplified mode that doesn't require a different wallet extension. Instead, the current provider's account is used as wallet owner by calling its "Sign Message" operation.

This can only work for wallets that use an EIP-191 ("Ethereum Signed Message") signature (like our sample SimpleWallet) Also, the UX is not great (the user is asked to sign a hash, and even the wallet address is not mentioned, only the signer)

```javascript
import { wrapProvider } from 'aa-conla-sdk'

//use this account as wallet-owner (which will be used to sign the requests)
const aaSigner = provider.getSigner()
const paymasterAPI = new PaymasterAPI(entryPointAddress, bundlerUrl)

const config = {
  chainId: await provider.getNetwork().then(net => net.chainId),
  entryPointAddress,
  bundlerUrl: 'bundlerUrl',
  paymasterAPI
} 
const aaProvider = await wrapProvider(provider, config, aaSigner)
const walletAddress = await aaProvider.getSigner().getAddress()

// send some eth to the wallet Address: wallet should have some balance to pay for its own creation, and for calling methods.

const myContract = new Contract(abi, aaProvider)

// this method will get called from the wallet address, through account-abstraction EntryPoint
await myContract.someMethod()
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.conla.com/developers/aa-wallet-and-paymaster/sdk-integration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
