PolyAgent is a multi-chain payroll system that lets organizations, DAOs, and global teams run payroll without exposing signer identities. Transactions appear on-chain as if submitted by a single
PolyAgent is a multi-chain payroll and multisig platform that enables organizations, DAOs, and global teams to run payroll without exposing signer identities. Every transaction appears on-chain as if submitted by a single anonymous relayer — signer identities remain completely hidden using zero-knowledge proofs.
The platform combines four key innovations into a unified product:
ZK-private multisig signing — no on-chain signer exposure
MetaMask Smart Accounts with ERC-7715 advanced permissions
x402 gasless USDC deposits — zero ETH required
Venice AI assistant for transaction analysis and platform guidance
Component | Description |
ZK Privacy | Noir circuits + zkVerify aggregation hide all signer identities on-chain |
Smart Accounts | MetaMask ERC-7572 Hybrid implementation upgrades EOAs to smart accounts |
Gasless Deposits | x402 protocol with EIP-3009 enables USDC deposits without ETH |
AI Assistant | Venice AI provides real-time transaction analysis and contextual help |
Multi-Chain | Deployed on Horizen, Base, and Arbitrum (Stylus Rust/WASM) |
Social Login | Web3Auth embedded wallets via Google, Apple, and email login |
Existing on-chain payroll and multisig solutions expose critical information that puts organizations at risk:
Problem | Impact |
Exposed signer identities | Multisig approvers are publicly visible on-chain, creating security and privacy risks for organizations and individuals |
Traceable payments | Recipient addresses and amounts are visible to competitors, analysts, and bad actors |
Gas complexity | Every deposit requires ETH, creating friction for non-crypto-native teams adopting web3 payroll |
Wallet fragmentation | Teams juggle multiple wallet extensions with inconsistent UX and security trade-offs |
No intelligent assistance | Users navigate complex blockchain operations — ZK proofs, permissions, multisig — without contextual help |
Layer | Solution | Technology |
Identity Privacy | ZK proofs hide all signer identities; only a relayer appears on-chain | Noir circuits + zkVerify aggregation |
Smart Account | Upgrade EOAs to MetaMask Smart Accounts with advanced capabilities | @metamask/smart-accounts-kit (ERC-7572) |
Gasless Deposits | x402 protocol enables USDC deposits without any ETH | EIP-3009 TransferWithAuthorization |
Delegated Execution | ERC-7715 permissions allow pre-authorized spending with caveats | ERC-7710 delegation + ERC-7715 permissions |
Social Login | Web3Auth for non-custodial social authentication | @web3auth/modal (Google, Apple, Email) |
AI Assistant | Venice AI-powered chat for transaction analysis and guidance | Venice AI + OpenAI-compatible SDK |
Multi-Chain | Deployed on Horizen, Base, and Arbitrum | Solidity + Arbitrum Stylus Rust/WASM |

PolyAgent uses @metamask/smart-accounts-kit to upgrade user wallets to MetaMask Smart Accounts (ERC-7572). This is the foundation that unlocks the entire advanced permissions and gasless deposit flow.
PolyAgent uses the Hybrid implementation, which combines EOA and smart account capabilities in a single wallet identity:
Transactions can originate from the EOA directly (no extra gas overhead) or from the smart account (for delegated/permissioned flows)
ERC-7715 permissions apply at the smart account level
x402 deposits can be delegated via the smart account without exposing the raw EOA
One-time deployment cost — users pay gas once, then unlock all advanced features permanently
Step | What Happens |
1. Connect wallet | User connects via RainbowKit (EOA) or Web3Auth (social login) |
2. Open upgrade modal | SmartAccountUpgradeModal explains benefits and the one-time gas cost |
3. Deploy smart account | toMetaMaskSmartAccount() deploys the Hybrid implementation contract |
4. Store address | Smart account address stored via useSmartAccountStore (Zustand persist) |
5. Unlock features | ERC-7715 permissions, x402 delegation, and gasless flows now available |
File | Purpose |
services/web3/smartAccount.ts | Creates MetaMask Smart Account from the user's existing EOA |
hooks/app/useSmartAccount.ts | React hook managing upgrade lifecycle, auto-deploy, and account retrieval |
components/modals/SmartAccountUpgradeModal.tsx | UI explaining capabilities and guiding the one-time deployment |
services/store/useSmartAccountStore.ts | Zustand store persisting smart account address across sessions |
PolyAgent implements ERC-7715 Advanced Permissions to enable secure, scoped transaction execution. Users grant one-time permissions with enforced caveats — eliminating repeated signing while keeping full control.
Permission Type | Description | Use Case in PolyAgent |
erc20-token-periodic | Spend up to X tokens per time period | x402 USDC deposit delegation — facilitator deposits on user's behalf within limits |
call-token-allowance | Authorize specific function calls | Relayer execution of payroll transactions within defined parameters |
native-transfer | Native ETH transfers up to a cap | Gas sponsorship — smart account covers fees without unlimited exposure |
Step | Action |
1 | User calls requestUSDCx402Permission(token, amount) from useAdvancedPermissions hook |
2 | MetaMask opens the ERC-7715 permission grant UI — user reviews caveats (max amount, token, period) |
3 | User signs — permission is stored and linked to the smart account |
4 | x402 facilitator can now deposit USDC on the user's behalf within those limits |
5 | Permission auto-expires or user explicitly revokes — no permanent trust required |
File | Purpose |
services/web3/permissions.ts | ERC-7715 helpers — requestExecutionPermissions, permission encoding |
hooks/app/useAdvancedPermissions.ts | React hook: requestUSDCx402Permission(), getGrantedPermissions() |
components/modals/PermissionRequestModal.tsx | UI for reviewing and confirming permission grants |
PolyAgent integrates Venice AI as the first AI assistant built into a privacy-preserving multisig platform. The API is accessed entirely server-side — the API key never reaches the client, and chat history is managed client-side for privacy.
Feature | Description |
Transaction Analysis | Analyze any transaction payload, explain what it does, and flag potential risks in plain language |
ZK Privacy Explainer | Guide users through how zero-knowledge proofs protect signer identities on PolyAgent |
Smart Account Help | Step-by-step assistance for the upgrade flow, permission grants, and delegation setup |
Gas Optimization | Suggest optimal chains and timing for payroll transfers across Horizen, Base, and Arbitrum |
Platform Guidance | Answer questions about any PolyAgent feature in real time during complex operations |
Component | Detail |
API Endpoint | POST /api/venice/chat — Next.js server route with lazy client initialization |
Model | zai-org-glm-5-1 accessed via Venice AI's OpenAI-compatible API |
API URL | |
Security | API key stored server-side only, never exposed to the browser client |
Chat history | Managed client-side in React state — no conversation logs stored on the server |
System prompt | Tuned specifically for PolyAgent context: ZK proofs, multisig, payroll, permissions |
File | Purpose |
app/api/venice/chat/route.ts | Server-side API route — handles requests, streams responses |
services/api/venice.ts | Service layer: getAIAssistantResponse(), analyzeTransaction() |
hooks/app/useVeniceAI.ts | React hooks: askAssistant(), analyzeTx() |
components/AiAssistant/VeniceChat.tsx | Chat UI component with message history and input |
app/dashboard/ai-assistant/page.tsx | Full-page AI Assistant dashboard view |
PolyAgent integrates Web3Auth Modal v11 to provide non-custodial social login, making the platform accessible to teams who do not want to manage seed phrases or install wallet extensions.
Method | Type | Wallet Derivation |
OAuth 2.0 | Deterministic from social account ID — same address on every login | |
Apple | OAuth 2.0 | Deterministic from Apple ID — same address on every login |
Passwordless | Deterministic from email address — same address on every login |
The same wallet address is guaranteed only when all three conditions match:
Same Web3Auth Client ID
Same Sapphire network (Devnet for development, Mainnet for production)
Same auth connection (e.g., same Google account)
Changing any one of these three factors produces a different wallet address.
Component | Detail |
Provider | Web3Auth Modal wired at the app root in ScaffoldEthAppWithProvidersClient |
wagmi bridge | useWeb3AuthLogin hook connects Web3Auth provider to wagmi after login |
EOA compatibility | Post-login, the Web3Auth EIP-1193 provider works with all existing wagmi hooks |
Smart Account | Web3Auth wallet can be upgraded to a MetaMask Smart Account like any other EOA |
Networks | Sapphire Devnet (development) and Sapphire Mainnet (production) |
PolyAgent implements the x402 protocol for gasless USDC deposits using EIP-3009 TransferWithAuthorization. Users sign deposits completely off-chain — no ETH is ever required.
Step | Action |
1 | User initiates deposit with an amount and target multisig address |
2 | Frontend generates an EIP-3009 TransferWithAuthorization signature (off-chain, no gas) |
3 | Signed authorization is submitted to the x402 facilitator |
4 | Facilitator submits the transfer on-chain — user pays zero ETH at any step |
Step | Action |
1 | User grants a one-time ERC-7715 erc20-token-periodic permission to the x402 facilitator |
2 | Permission includes enforced caveats: maximum amount, token address, and time period |
3 | Facilitator can now deposit USDC on the user's behalf without any further signatures |
4 | User never needs ETH for deposit gas — the entire flow is gasless and non-custodial |
Detail | Value |
Protocol | x402 with EIP-3009 TransferWithAuthorization |
Primary hook | hooks/api/useX402Deposit.ts |
Delegation mode | useDelegation: true — routes authorization through smart account address |
Direct mode | useDelegation: false — routes authorization through user's EOA |
Shared utilities | @polypay/shared — EIP-3009 helpers and x402 payload encoding |
PolyAgent uses Noir circuits compiled to UltraHonk proofs, aggregated on-chain by zkVerify. The result: multiple signers approve a transaction privately, and only the relayer's address ever appears in tx.from.
Step | Actor | Action |
1 | Each signer | Derives a secret from their wallet signature and computes commitment = poseidon(secret) |
2 | Each signer | Generates a Noir UltraHonk ZK proof proving their commitment is in the authorized signer Merkle tree — without revealing which position |
3 | Each signer | Submits their proof (commitment, nullifier, aggregationId, domainId, merklePath, leafCount, index) to the relayer |
4 | Relayer | Once enough proofs are collected (>= signaturesRequired), calls execute(nonce, to, value, data, proofs[]) |
5 | Smart contract | Calls zkVerify.verifyProofAggregation() for each proof — all must pass |
6 | Blockchain | Transaction executes; only the relayer's address appears on-chain; all signer identities remain private |
Parameter | Value |
Proving system | UltraHonk (keccak256('ultrahonk')) |
Hash function | PoseidonT3 — compatible with Noir poseidon2 |
Field prime | BN254 — 21888242871839275222246405745257275088548364400416034343698204186575808495617 |
Verification | On-chain via IVerifyProofAggregation (zkVerify contract) |
Circuit language | Noir |
The core wallet contract deployed on Horizen and Base. Handles ZK proof verification, signer management, and batch payroll transfers.
Function | Description |
execute(nonce, to, value, data, proofs[]) | Executes a transaction once proofs.length >= signaturesRequired. Each proof is verified via zkVerify.verifyProofAggregation() |
addSigners(commitments[], newThreshold) | Add new signer commitments to the Merkle tree (onlySelf guard) |
removeSigners(commitments[], newThreshold) | Remove signer commitments and update threshold (onlySelf guard) |
batchTransfer(recipients[], amounts[]) | Batch native ETH transfers for payroll distribution |
batchTransferMulti(recipients[], amounts[], tokenAddresses[]) | Batch mixed token transfers across multiple ERC-20s |
An EIP-1167 minimal proxy factory for Arbitrum Stylus. The Rust/WASM port of MetaMultiSigWallet exceeds the 24KB EVM code-size limit (~29KB compressed). PolyAgent solves this with a two-tier deployment:
The Stylus implementation (~29KB WASM) is deployed once via cargo-stylus
Per-user EIP-1167 proxies (~52 bytes EVM bytecode) delegatecall into the implementation
Each proxy holds independent storage: signers, nonces, nullifiers
A custom EIP-1167 variant includes a 5-byte prefix to handle empty-calldata (receive() / plain ETH transfers)
Chain | Network | zkVerify Contract | Stylus Impl |
2651420 | Horizen testnet | 0x3098A697...E868C21 | — |
84532 | Base Sepolia | 0x0807C544...A1e8A8 | — |
26514 | Horizen mainnet | 0xCb47A3C3...b2B69 | — |
8453 | Base mainnet | 0xCb47A3C3...b2B69 | — |
421614 | Arbitrum Sepolia | 0xd0074949...F0FDE2 | 0x61fddf7c...59f1d1 |
42161 | Arbitrum One | 0xCb47A3C3...b2B69 | 0x49e772bd...2850f |
All chains share vkHash = 0xb3c5381523...ae38. PoseidonT3 library at 0x3333...3B93 on all chains.
Layer | Technology |
Frontend | Next.js 15, React 19, TypeScript 5.8, Tailwind CSS 4, DaisyUI 5 |
State | Zustand 5 (persist middleware), TanStack React Query 5 |
Forms | React Hook Form 7 + Zod 3 |
Web3 | wagmi 2, viem 2, RainbowKit 2 |
Smart Account | @metamask/smart-accounts-kit (ERC-7572 Hybrid) |
Permissions | ERC-7715 Advanced Permissions, ERC-7710 Delegations |
Embedded Wallet | @web3auth/modal v11 (Google, Apple, Email) |
AI | Venice AI via OpenAI-compatible API (zai-org-glm-5-1 model) |
Gasless | x402 + venice-x402-client (EIP-3009 TransferWithAuthorization) |
ZK | Noir circuits, UltraHonk proofs, zkVerify on-chain aggregation |
Backend | NestJS 11, TypeScript 5.7, Prisma 7, PostgreSQL |
Contracts | Solidity (Horizen/Base), Arbitrum Stylus in Rust/WASM |
Real-time | Socket.io WebSocket notifications |
Package / Path | Description |
packages/nextjs/ | Frontend — Next.js 15 App Router |
packages/nextjs/app/api/venice/chat/ | Venice AI server-side API route |
packages/nextjs/app/dashboard/ai-assistant/ | AI Assistant full-page dashboard |
packages/nextjs/hooks/app/useSmartAccount | Smart Account lifecycle hook |
packages/nextjs/hooks/app/useAdvancedPermissions | ERC-7715 permissions hook |
packages/nextjs/hooks/app/useVeniceAI | Venice AI assistant hooks |
packages/nextjs/hooks/app/useWeb3AuthLogin | Web3Auth social login hook |
packages/nextjs/hooks/api/useX402Deposit | Gasless USDC deposit hook |
packages/nextjs/services/web3/smartAccount.ts | Smart Account creation service |
packages/nextjs/services/web3/permissions.ts | ERC-7715 helpers |
packages/nextjs/services/web3/web3auth.tsx | Web3Auth provider setup |
packages/backend/ | NestJS 11 backend — Auth, Tx Engine, ZK Verify |
packages/shared/ | @polypay/shared — DTOs, types, EIP-3009 utilities |
packages/hardhat/contracts/MetaMultiSigWallet.sol | Core ZK multisig wallet contract |
packages/hardhat/contracts/MetaMultiSigWalletStylusFactory.sol | Arbitrum Stylus proxy factory |
usdc-deposit-agent/ | x402 gasless deposit facilitator agent |
docker/ | Docker Compose — PostgreSQL setup |
Node.js >= 20.18.3
Yarn v3.2.3 or higher
Docker & Docker Compose (for PostgreSQL)
Variable | Required | Description |
NEXT_PUBLIC_WEB3AUTH_CLIENT_ID | Yes | Web3Auth project client ID (from developer.metamask.io) |
VENICE_API_KEY | Yes | Venice AI API key (from venice.ai) |
NEXT_PUBLIC_API_URL | No | Backend URL (default: localhost:4000) |
NEXT_PUBLIC_NETWORK | No | testnet (default) or mainnet |
NEXT_PUBLIC_FEATURE_X402_DEPOSIT | No | Set to true to enable x402 gasless deposits |
NEXT_PUBLIC_ALCHEMY_API_KEY | No | Alchemy API key (has default) |
NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID | No | WalletConnect project ID (has default) |
Command | Description |
yarn install | Install all dependencies across packages |
yarn workspace @polypay/shared build | Build shared utilities package (required first) |
yarn workspace @polypay/frontend dev | Start frontend dev server on port 3000 |
yarn workspace @polypay/backend start:dev | Start NestJS backend on port 4000 |
cd docker && docker compose up -d postgres | Start PostgreSQL database |
yarn build | Build all packages for production |
yarn test | Run Hardhat contract tests |
yarn lint | ESLint check across frontend and contracts |
yarn next:check-types | TypeScript type check (frontend) |
PolyAgent demonstrates the most complete integration of x402 + ERC-7710 in a real production use case — payroll for DAOs and global teams:
Zero ETH required for any deposit at any point
One-time ERC-7715 permission grant permanently replaces repeated transaction signing
Caveat-enforced spending limits (max amount, token, period) protect user funds
Smart Account delegation routes authorization through ERC-7710 scopes with caveat enforcers
The Smart Account + x402 synergy is the most novel UX unlocked by ERC-7715: a facilitator deposits on your behalf with zero interaction after the first grant
PolyAgent is the first AI-integrated privacy-preserving multisig platform:
Real-time transaction analysis — paste any payload and get plain-language risk assessment
Contextual ZK explainer — guides users through proof generation and identity hiding
Smart Account upgrade assistant — walks users through ERC-7715 permission grants step by step
Gas optimization advice across Horizen, Base, and Arbitrum
Server-side API architecture — Venice AI key is never exposed to the browser
PolyAgent — MIT License — Built for MetaMask Smart Accounts Kit × 1Shot API Hackathon
<h1>Progress During Hackathon</h1><p>During the MetaMask Smart Accounts Kit × 1Shot API Hackathon, we successfully designed and developed PolyAgent, a privacy-preserving payroll and treasury management platform that combines Zero-Knowledge cryptography, MetaMask Smart Accounts, ERC-7715 Advanced Permissions, Venice AI, Web3Auth Embedded Wallets, and x402 gasless payment infrastructure.</p><h3>Phase 1: Research & Architecture Design</h3><ul><li><p>Identified key challenges in existing blockchain payroll systems, including public signer visibility, treasury transparency, gas fee friction, and poor onboarding experiences.</p></li><li><p>Designed a privacy-first architecture leveraging Zero-Knowledge proofs to hide signer identities while maintaining verifiable approvals.</p></li><li><p>Planned a multi-layer architecture integrating Smart Accounts, AI assistance, embedded wallets, and delegated permissions.</p></li></ul><h3>Phase 2: Smart Contract Development</h3><ul><li><p>Developed the MetaMultiSigWallet smart contract for privacy-preserving treasury management.</p></li><li><p>Integrated Noir-based Zero-Knowledge proof verification using zkVerify aggregation.</p></li><li><p>Implemented signer management, threshold approvals, batch transfers, and secure treasury execution mechanisms.</p></li><li><p>Deployed contracts across Horizen, Base, and Arbitrum environments.</p></li></ul><h3>Phase 3: MetaMask Smart Account Integration</h3><ul><li><p>Integrated MetaMask Smart Accounts Kit to upgrade traditional EOAs into programmable Smart Accounts.</p></li><li><p>Built the Smart Account upgrade workflow and user onboarding experience.</p></li><li><p>Enabled account abstraction capabilities including delegated execution and advanced permission management.</p></li><li><p>Implemented Hybrid Smart Account architecture for seamless compatibility with existing wallets.</p></li></ul><h3>Phase 4: ERC-7715 Advanced Permissions</h3><ul><li><p>Implemented ERC-7715 permission request and management flows.</p></li><li><p>Developed permission templates for periodic token spending, treasury execution, and delegated payment operations.</p></li><li><p>Added support for secure session-based execution with configurable limits and caveats.</p></li><li><p>Enabled one-time approval workflows that eliminate repetitive transaction signing.</p></li></ul><h3>Phase 5: Web3Auth Embedded Wallet Integration</h3><ul><li><p>Integrated Web3Auth Embedded Wallets for simplified onboarding.</p></li><li><p>Added support for Google, Apple, and Email authentication methods.</p></li><li><p>Connected embedded wallets with the existing wagmi and Smart Account infrastructure.</p></li><li><p>Eliminated the need for seed phrase management for new users.</p></li></ul><h3>Phase 6: Venice AI Assistant Development</h3><ul><li><p>Integrated Venice AI through an OpenAI-compatible API architecture.</p></li><li><p>Built an intelligent assistant capable of transaction analysis, platform guidance, Smart Account support, and privacy education.</p></li><li><p>Developed a dedicated AI dashboard and chat interface.</p></li><li><p>Added contextual assistance for treasury and payroll management workflows.</p></li></ul><h3>Phase 7: x402 Gasless Payment Infrastructure</h3><ul><li><p>Implemented x402 protocol support for gasless USDC deposits.</p></li><li><p>Integrated EIP-3009 TransferWithAuthorization workflows.</p></li><li><p>Combined Smart Account permissions with delegated payment execution.</p></li><li><p>Enabled users to interact with treasury operations without requiring ETH for gas fees.</p></li></ul><h3>Phase 8: Frontend & User Experience</h3><ul><li><p>Developed a modern dashboard using Next.js, React, TypeScript, and Tailwind CSS.</p></li><li><p>Built treasury management, account creation, AI assistant, and permission management interfaces.</p></li><li><p>Added real-time feedback and transaction monitoring capabilities.</p></li><li><p>Created a streamlined user experience suitable for both Web3-native and non-crypto-native users.</p></li></ul><h3>Final Outcome</h3><p>By the end of the hackathon, we successfully delivered a functional prototype demonstrating:</p><ul><li><p>Privacy-preserving multisignature treasury management.</p></li><li><p>MetaMask Smart Account integration.</p></li><li><p>ERC-7715 Advanced Permission workflows.</p></li><li><p>Web3Auth Embedded Wallet onboarding.</p></li><li><p>Venice AI-powered treasury assistant.</p></li><li><p>Gasless USDC deposits through x402.</p></li><li><p>Multi-chain deployment support across Base, Horizen, and Arbitrum.</p></li></ul><p>PolyAgent demonstrates how privacy, account abstraction, artificial intelligence, and user-friendly onboarding can be combined into a single enterprise-ready platform for modern Web3 payroll and treasury operations.</p>
<p>na</p>