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

# Installing the intent executor

> Install the Intent Executor module on your ERC-7579 smart account to use Rhinestone Warp.

The Intent Executor is an ERC-7579 executor module that must be installed on your smart account before you can use Rhinestone's Warp infrastructure. It is the onchain component that allows the Rhinestone Orchestrator and its relayers to execute crosschain intents on behalf of your account.

Without it, the Orchestrator has no permission to execute transactions through your smart account — even if you have signed a valid intent offchain.

## Contract address

```
0x00000000005aD9ce1f5035FD62CA96CEf16AdAAF
```

Deployed on all chains supported by Rhinestone.

## Installation

The Intent Executor is a standard ERC-7579 executor module (module type `2`). Install it using the SDK's `installModule` action:

```ts theme={null}
import { installModule } from '@rhinestone/sdk/actions'

const result = await rhinestoneAccount.sendTransaction({
  targetChain: base,
  calls: [
    installModule({
      address: '0x00000000005aD9ce1f5035FD62CA96CEf16AdAAF',
      type: 'executor',
    }),
  ],
})
```

<Note>
  Install the module on every chain where you want to use Rhinestone intents.
</Note>

## Verifying installation

Read the `isInitialized` function on the Intent Executor contract to check whether it has been installed on your account:

```ts theme={null}
import { createPublicClient, http } from 'viem'
import { base } from 'viem/chains'

const publicClient = createPublicClient({
  chain: base,
  transport: http(),
})

const isInstalled = await publicClient.readContract({
  address: '0x00000000005aD9ce1f5035FD62CA96CEf16AdAAF',
  abi: [{
    name: 'isInitialized',
    type: 'function',
    inputs: [{ name: 'smartAccount', type: 'address' }],
    outputs: [{ name: '', type: 'bool' }],
    stateMutability: 'view',
  }],
  functionName: 'isInitialized',
  args: [accountAddress],
})
```

Returns `true` once the module has been installed on the account.

## Uninstalling

```ts theme={null}
import { uninstallModule } from '@rhinestone/sdk/actions'

const result = await rhinestoneAccount.sendTransaction({
  targetChain: base,
  calls: [
    uninstallModule({
      address: '0x00000000005aD9ce1f5035FD62CA96CEf16AdAAF',
      type: 'executor',
    }),
  ],
})
```

## Next steps

<Card title="API Quickstart" icon="bolt" href="../quickstart">
  Start sending intents with the Rhinestone API once the module is installed.
</Card>
