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

# Standalone Strategy

> StandaloneStrategy is the same allowlisted-call execution wallet as Strategy, but not controlled by a Fund. Its purpose is to deploy fund strategies on a different chain than the F

> Sources: [`src/StandaloneStrategy.sol`](https://github.com/zentryHQ/red-potion-contract/blob/main/src/StandaloneStrategy.sol) · [`src/StandaloneStrategyDeployer.sol`](https://github.com/zentryHQ/red-potion-contract/blob/main/src/StandaloneStrategyDeployer.sol)

## StandaloneStrategy

`StandaloneStrategy` is the same **allowlisted-call execution wallet** as [Strategy](/developers/contract-reference/strategy), but **not controlled by a Fund**. Its purpose is to **deploy fund strategies on a different chain than the Fund itself**: the Fund and the rest of the fund instance live on the home chain, while a StandaloneStrategy executes on another chain where the target protocols live. Assets are moved between the Fund and the strategy by bridging (operationally, outside these contracts), and results are reflected into the fund's NAV through the [Oracle](/developers/contract-reference/oracle)'s price reports.

Because the Fund does not exist on the strategy's chain, there is no `onlyFund` control — the strategy has its own admin, and the `fund` field is an optional reference. It reuses the identical `CallValidatorModule` allowlist machinery and `CALLER_ROLE` execution interface; the differences are in who controls the assets:

|                                 | [Strategy](/developers/contract-reference/strategy)                        | StandaloneStrategy                                                                                         |
| ------------------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| Deployed by                     | `Fund.createStrategy` → FundManager                                        | `StandaloneStrategyDeployer`                                                                               |
| Chain                           | Same chain as the Fund                                                     | **Any chain** — typically not the Fund's                                                                   |
| `fund` field                    | Required; enforces `onlyFund` on `pullAsset`                               | Optional reference — may be zero (**orphan**); when set, only used to forbid calling that address          |
| Asset recovery                  | `pullAsset(asset, amount)` — **only the Fund**, always returns to the Fund | `pullAsset(asset, to, amount)` — **strategy admin** (`DEFAULT_ADMIN_ROLE`), to any address (e.g. a bridge) |
| Registered in `Fund.isStrategy` | Yes                                                                        | No                                                                                                         |
| Asset in/out                    | `Fund.pushAssetToStrategy` / `pullAssetFromStrategy`                       | Bridged/transferred externally                                                                             |

### Function reference

| Function                                                                      | Access                                               | Description                                                                                  |
| ----------------------------------------------------------------------------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| `initialize(fund, admin, roleHolders[])`                                      | initializer (via deployer)                           | Sets the optional fund reference and the strategy's own ACL. `admin` non-zero.               |
| `call(target, data)`                                                          | `CALLER_ROLE` (payable)                              | Execute an allowlisted call. Same rules as Strategy; target must not be the referenced fund. |
| `call(target, data, constrainedOffsets, constrainedValues)`                   | `CALLER_ROLE` (payable)                              | Constrained variant — verifies pinned calldata words.                                        |
| `pullAsset(asset, to, amount)`                                                | `DEFAULT_ADMIN_ROLE`                                 | Withdraw any asset to any non-zero address.                                                  |
| `addCalls` / `removeCalls` / `addConstrainedCalls` / `removeConstrainedCalls` | `ADD_ALLOWED_CALL_ROLE` / `REMOVE_ALLOWED_CALL_ROLE` | Allowlist management, identical to Strategy.                                                 |
| `fund()` / `getAllowedCalls()` / `getCallHash(...)` etc.                      | view                                                 | Same views as Strategy.                                                                      |
| `receive()`                                                                   | anyone                                               | Accepts ETH.                                                                                 |

## StandaloneStrategyDeployer

`StandaloneStrategyDeployer` is the **root deployer for standalone strategies** — a slimmed-down analog of [FundManagerDeployer](/developers/contract-reference/fund-manager-deployer), deployed on each **strategy chain** (chains where funds execute remotely, without the rest of the protocol stack). It owns a single [Factory](/developers/contract-reference/factory) that stamps out `StandaloneStrategy` proxies and keeps a registry of everything it deployed. It has its own `ACLModule` access control.

### Function reference

| Function                                                                                                  | Access                     | Description                                                                                                   |
| --------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `initialize(admin, proxyAdmin, standaloneStrategyFactory, roleHolders[])`                                 | initializer                | Sets the admin, ProxyAdmin owner reference, and the factory.                                                  |
| `setImplementations(factoryImpl, standaloneStrategyImpl)`                                                 | `SET_IMPLEMENTATIONS_ROLE` | Records both implementations and pushes the strategy implementation into the factory (future deploys use it). |
| `createStandaloneStrategy(fund, admin, roleHolders[])`                                                    | `CREATE_STRATEGY_ROLE`     | Deploys a new StandaloneStrategy proxy via `factory.create` and initializes it. `fund` may be zero.           |
| `strategyCount()` / `strategyAt(i)` / `isStrategy(addr)`                                                  | view                       | Registry, backed by the factory.                                                                              |
| `factoryImplementation` / `standaloneStrategyImplementation` / `standaloneStrategyFactory` / `proxyAdmin` | view                       | Current wiring.                                                                                               |

## Related

[Strategy](/developers/contract-reference/strategy) · [Oracle](/developers/contract-reference/oracle) · [Fund](/developers/contract-reference/fund)
