# Allo Gold Architecture - https://github.com/allocapital/allo-gold
Allo gold acts as a unified interface for interating with funding mechanisms on chain.
The `Plugin` interface defines the core structure for integrating funding mechanisms with the Allo platform. Its main purpose is to provide an association between the actions and assistant needed to deploy a new funding mechanism. It was heavily inspired by [Eliza's plugin system](https://elizaos.github.io/eliza/docs/packages/plugins/).
## Components
### Bread and Butter
Actions and assistants are further documentented [here](https://hackmd.io/@Ep4Ckw8STUmiqCn6Rnzscg/HkQ8AtjYJl) and [here](https://hackmd.io/@Ep4Ckw8STUmiqCn6Rnzscg/B1N50YsKJg).
- `actions`: Array of [`Action`](https://hackmd.io/@Ep4Ckw8STUmiqCn6Rnzscg/HkQ8AtjYJl) classes defining available operations
- Each action represents a distinct operation users can perform
- `pluginAssistant`: [`PluginAssistant`](https://hackmd.io/@Ep4Ckw8STUmiqCn6Rnzscg/B1N50YsKJg) configuration for AI-powered features
- Required for enabling AI assistance in your plugin
- Provides context and validation for AI interactions
## NextJS Integration
- Form Generation:
- [DynamicForm](https://github.com/allocapital/allo-gold/blob/main/app/components/DynamicForm.tsx) is used to render and validate the action's form fields.
- If an additional input is needed it should be added in DynamicForm.tsx
- Action Interactions: [ActionHandler](https://github.com/allocapital/allo-gold/blob/main/app/hooks/useAction.ts) is the primary hook for handling action interactions. It is responsible for checking action results, generating calldata for EVM interactions, and submitting transactions to the blockchain.
## Properties
### Basic Plugin Information
- `name`: Name of your plugin displayed to users
- `description`: Detailed description explaining your plugin's functionality
- `logo`: URL to your plugin's logo image
- `id`: Unique identifier for your plugin
## Example Implementation
```typescript
const myPlugin: Plugin = {
name: "Split Payment",
description: "Create and manage payment splits between multiple recipients",
logo: "/logos/split.svg",
id: "split-payment",
actions: [action1, action2],
pluginAssistant,
};
```
# Challenges
- Currently injects relavent information into the system prompt to determine which mechanism to choose from
- As more mechanisms are added this will need updated since this will become less effective
- One solution could be to implement RAG / embeddings
- Contract Interactions
- Currently limited to two consecutive interactions
- Returning user flow - kind of clunky currently used to load the profile interaction from allo before submitting the round tx