Skip to content

WalterVenin/VaultPort

Repository files navigation

VaultPort

A minimal on-chain vault with role separation and two-tier whitelist control. Modular plugin system, integration and launch in minutes — for AI agents, DAOs, crowdfunding, and any scenario.

Status: Testnet (Base Sepolia) · Open source · BUSL-1.1 · Twitter

Concept

A universal solution that lets you set up secure, free, and simple fund management for AI agents, DAOs, crowdfunding, and whatever else you need.

The core separates who owns the funds, who can spend them, and where they can be spent — three independent parameters configurable for any use case.

The owner retains full control and can revoke access at any time. The operator (AI agent, grant recipient, campaign creator) can spend — but only to whitelisted addresses. The whitelist is two-tiered: a global registry of verified vendors and a local per-vault list configured by the owner.

All business logic — budgets, deadlines, refunds, conditions — lives in plugins. The core enforces the boundary. A new use case only requires a new plugin.

Shipped Plugins

AIBudgetPlugin — A recurring spend limit for the operator. The amount, period, and vendor list are set by the owner. Exceeding the limit is blocked by the contract.

CrowdfundPlugin — Fund collection with a goal and a deadline. The creator can only spend to approved addresses. If the goal is not met, each participant claims a refund directly from the contract.

DAO grant management and milestone-based fund release plugins are currently in development.

Plugin Architecture

Each plugin is a standalone contract that connects to a vault and defines spending rules. The core does not change. The plugin defines the logic — the core enforces execution.

Official plugins are maintained by the project. Any developer (or AI agent) can quickly and easily build a custom plugin for their specific use case by implementing the IPlugin interface.

Architecture

  Deposit ──► ┌────────────────────────┐
              │      VaultPort         │
              │    (core, ~200 LOC)    │
              │                        │
              │  • ERC-20 balance      │
              │  • Whitelist gate      │ ──► Approved Vendor
              │  • Owner / Controller  │
              └──────────┬─────────────┘
                         │
              ┌──────────┴─────────────┐
              │    Plugin Layer        │
              │                        │
              │  AIBudgetPlugin        │
              │  CrowdfundPlugin       │
              │  ...your plugin        │
              └────────────────────────┘

Core does three things:

  1. Holds tokens — anyone can deposit
  2. Enforces whitelist — spending only to approved vendors (global registry or per-vault list)
  3. Separates roles — Owner (full control) vs Controller (spend-only)

Plugins handle everything else. They attach to the vault as Owner or Controller and define the rules. The vault does not know or care what the plugin does — it simply enforces the spending boundary.

Contracts

Contract Description
VaultPort.sol Core vault — deposit, spend, withdraw, whitelist, rescue
VaultFactory.sol Clone factory (EIP-1167) with CREATE2 support
CategoryRegistry.sol Global vendor whitelist by category
PluginRegistry.sol Plugin index for frontends and subgraph
AIBudgetPlugin.sol Recurring spend budgets with epoch limits
CrowdfundPlugin.sol Goal-based crowdfunding with deadline and refunds
IPlugin.sol Plugin interface

Testnet (Base Sepolia)

Contract Address
VaultFactory 0xBA6540D0922788E4b6338203c5edCd1C8A55cdD4
VaultPort (impl) 0x4D420C4e8411e85738Fa735DE1BE05c23B5aa75c
CategoryRegistry 0xA8E41bB18da884A8c55B929443a6017d0D37D66a
PluginRegistry 0xE9fd54E2ca15B097fc5b3eeb7EC530009ceA9e5B
CrowdfundPlugin 0x24e608C4b697Bbb1CAf6785957F4dB5EB39cB526
AIBudgetPlugin 0x2688eE3541D3b7922C24589369349b59cc0FAaD0

All contracts are verified — source code is readable on BaseScan. See Testnet Guide for testing instructions.

Security

  • Minimal core with no upgradeability, no pause, no admin functions
  • ReentrancyGuard + SafeERC20 on all state-changing functions
  • No oracles, no external price dependencies
  • No calldata forwarding in spend() — tokens go directly to the vendor
  • Each vault is an independent EIP-1167 clone — isolated by design
  • rescueERC20() / rescueETH() for accidentally sent assets

Development

npm ci
npm run preflight    # typecheck + tests (87 passing)

Subgraph

cd subgraph && npm ci
npm run codegen && npm run build

Stack

Solidity ^0.8.20 · OpenZeppelin v5 · Hardhat · TypeScript · The Graph · ERC-4337 (account abstraction, session keys) · Base Sepolia

Links

License

Business Source License 1.1 — converts to AGPL-3.0 on April 8, 2030.

About

Programmable escrow vaults for AI agents, crowdfunding, and DAOs. Dumb core, smart plugins. Built on Base. TESTNET

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors