Compliance-ready payment infrastructure for global businesses on-chain.
MantlePay is a compliance-aware smart wallet platform that transforms how businesses handle crypto payments. Using ERC-4337 account abstraction, it enables automated payroll, contractor payments, vendor invoices, and subscriptions with built-in compliance metadataโall executed automatically on Mantle Network.
Crypto payments for businesses face a fundamental challenge: there's no native way to track jurisdiction, tax categories, or audit metadata on-chain.
| Pain Point | Impact |
|---|---|
| No compliance metadata | W2 salaries, 1099 contractors, and international payments look identical on-chain |
| No jurisdiction tracking | US-CA vs UK vs EU-DE payments are indistinguishable in block explorers |
| Manual categorization hell | Export transactions โ manually tag each one โ reconcile in spreadsheets |
| No audit trail | "Prove you paid Alice $5000 in Q3 as a W2 employee in California" = hours of forensic work |
| Clunky multi-step UX | Multiple approvals, gas token management, and technical knowledge required |
| Tool | Compliance Support | Automation | Multi-Jurisdiction |
|---|---|---|---|
| MetaMask | โ None | โ Manual only | โ No tracking |
| Gnosis Safe | โ None | โ Manual execution | โ No metadata |
| Request Network | |||
| Sablier | โ Streaming only | โ Automated | โ No compliance |
| Traditional Payroll (Gusto, Deel) | โ Full compliance | โ Automated | โ Multi-jurisdiction |
| MantlePay | โ Native on-chain compliance with jurisdiction metadata | โ Chainlink-powered automation | โ Built-in multi-jurisdiction support |
MantlePay makes compliance metadata a native part of every on-chain payment by combining three key technologies:
Natural language commands โ executable on-chain transactions with compliance data
"Pay my California W2 employees Alice and Bob $6,000 each biweekly starting February 1st"
MantlePay extracts:
- Recipients: Alice (0x...), Bob (0x...)
- Amounts: $6,000 each
- Frequency: Biweekly (1,209,600 seconds)
- Duration: Ongoing until cancelled
- Jurisdiction: US-CA
- Tax Category: PAYROLL_W2
- Period: Auto-generated (2025-02-01, 2025-02-15, etc.)
Every payment includes structured compliance data stored on-chain
struct ComplianceMetadata {
string[] entityIds; // ["EMP-001", "EMP-002"] - employee/vendor IDs
string jurisdiction; // "US-CA", "UK", "EU-DE", "NG"
string category; // "PAYROLL_W2", "CONTRACTOR", "INVOICE", "VENDOR"
string referenceId; // "2025-01", "INV-12345", "PO-789"
}Decentralized network executes scheduled payments with compliance preservation
MantlePay supports a taxonomy of business payment types with jurisdiction awareness:
Tax Categories:
PAYROLL_W2- US W2 employeesPAYROLL_1099- US 1099 contractorsCONTRACTOR- International contractorsBONUS- Performance bonusesINVOICE- Vendor invoicesVENDOR- Recurring vendor paymentsGRANT- Grants and disbursementsSUBSCRIPTION- Service subscriptions
Jurisdiction Codes:
- US States:
US-CA,US-NY,US-TX - International:
UK,EU-DE,EU-FR,NG, etc.
Additional Metadata:
entityIds[]- Per-recipient identifiers (employee numbers, vendor codes)referenceId- Links to payroll periods, invoice numbers, PO numbersperiodId- Time period tracking (2025-01, 2025-Q1)
Define complex payment workflows using natural language:
Examples:
# Multi-jurisdiction payroll
"Pay monthly: Alice $6k W2 California, Bob ยฃ4k contractor UK, Charlie โฆ800k contractor Nigeria"
# Quarterly 1099 payments
"Pay 1099 contractors $15,000 each quarterly for 2025, label as Q1/Q2/Q3/Q4"
# Invoice batch processing
"Process vendor invoices: UK hosting ยฃ500, Nigerian design โฆ200k, German legal โฌ2000"
# Subscription management
"Pay $500 to our SaaS provider monthly, categorize as subscription"
Execute multi-recipient payouts in a single transaction with individual compliance tagging:
// Each recipient gets their own compliance metadata
executeBatchWithCompliance([
{ to: alice, amount: "6000", entityId: "EMP-001", jurisdiction: "US-CA", category: "W2" },
{ to: bob, amount: "4000", entityId: "CTR-001", jurisdiction: "UK", category: "CONTRACTOR" },
{ to: charlie, amount: "800000", entityId: "CTR-002", jurisdiction: "NG", category: "CONTRACTOR" }
])- No external multisend contracts required
- Single gas-efficient transaction on Mantle
- Each transfer preserves individual compliance data
- Immutable on-chain audit trail
Powered by MpIntentRegistry and Chainlink Automation:
function createIntent(
address token,
string memory name,
address[] memory recipients,
uint256[] memory amounts,
uint256 interval,
uint256 duration,
ComplianceMetadata memory compliance // Preserved across ALL executions
) external returns (bytes32 intentId)Key Features:
- Compliance metadata stored once, applied to every execution
- Jurisdiction and category tracking across entire payment schedule
- Automatic period ID generation for each execution
- Failed payment tracking for recovery
- Cancellation with proper fund release and metadata preservation
Jurisdiction View:
- Filter by region: US-CA, UK, EU-DE, NG, etc.
- See total payments per jurisdiction
- Track jurisdiction-specific compliance requirements
Category View:
- Filter by tax type: W2, 1099, Contractor, Invoice, etc.
- Aggregate spending per category
- Prepare category-specific tax reports
Period View:
- Filter by time: Monthly, Quarterly, Annually
- Generate period-specific reports
- Track spending trends over time
Export Capabilities:
- One-click CSV export for accountants
- Jurisdiction-filtered exports (e.g., "All US-CA W2 payments in Q1 2025")
- Category-filtered exports (e.g., "All 1099 payments in 2025")
- Custom date range exports
All transactions sponsored by MantlePay paymaster:
- Users don't need MNT for gas
- Seamless onboarding for non-crypto teams
- Business pays gas fees in bulk
- Frictionless payment experience
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MantlePay Architecture โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โ โ Next.js App โโโโโถโ AI NLP Parser โโโโโถโ Smart Wallet โ โ
โ โ (Frontend) โ โ (Gemini 2.0) โ โ (ERC-4337) โ โ
โ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโโ โ
โ โ โ
โ Extracts: โ โ
โ - Recipients โผ โ
โ - Amounts โโโโโโโโโโโโโโโโโโโโ โ
โ - Jurisdiction โ Compliance Data โ โ
โ - Category โ (On-Chain) โ โ
โ - Frequency โโโโโโโโโโฌโโโโโโโโโโ โ
โ - Duration โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โ โ Envio Indexer โโโโโโ Mantle Networkโโโโโโ Intent Registry โ โ
โ โ (GraphQL) โ โ (Testnet) โ โ + Chainlink โ โ
โ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโ โ
โ โ Dashboard โ โ Compliance-filtered views โ
โ โ + CSV Export โ โ
โ โโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
The core smart account implementing ERC-4337 with compliance extensions:
Key Functions:
// Single execution with compliance
function executeWithCompliance(
address target,
uint256 value,
bytes calldata data,
ComplianceMetadata calldata compliance
) external payable
// Batch execution with compliance
function executeBatchWithCompliance(
Call[] calldata calls,
ComplianceMetadata calldata compliance
) external payable
// Intent-triggered batch transfer (called by registry)
function executeBatchIntentTransfer(
address token,
address[] calldata recipients,
uint256[] calldata amounts,
bytes32 intentId,
uint256 transactionCount,
bool revertOnFailure,
ComplianceMetadata calldata compliance
) external returns (uint256 failedAmount)Commitment Tracking:
// Prevents double-spending of funds locked in intents
mapping(address => uint256) public s_committedFunds;
function increaseCommitment(address token, uint256 amount) external onlyRegistry
function decreaseCommitment(address token, uint256 amount) external onlyRegistry
function getAvailableBalance(address token) external view returns (uint256)Security Features:
- Reentrancy protection on all payment functions
- Commitment checks prevent spending locked funds
- Only owner or EntryPoint can execute
- Intent registry has isolated permissions
Central registry managing all automated payment intents with Chainlink integration:
Intent Structure:
struct Intent {
bytes32 id; // Unique identifier
address wallet; // Owner wallet
address token; // Payment token (address(0) for MNT)
string name; // Human-readable name
address[] recipients; // Payment recipients
uint256[] amounts; // Per-recipient amounts
uint256 interval; // Seconds between payments
uint256 duration; // Total duration in seconds
uint256 transactionCount; // Current execution count
uint256 totalTransactionCount; // Total planned executions
uint256 transactionStartTime; // Start timestamp
uint256 transactionEndTime; // End timestamp
uint256 latestTransactionTime; // Last execution timestamp
bool active; // Active status
bool revertOnFailure; // Atomic vs skip mode
uint256 failedAmount; // Accumulated failed transfers
ComplianceMetadata compliance; // Compliance data
}Chainlink Automation Integration:
// Called by Chainlink nodes to check if any intent needs execution
function checkUpkeep(bytes calldata)
external view
returns (bool upkeepNeeded, bytes memory performData)
// Called by Chainlink when upkeep is needed
function performUpkeep(bytes calldata performData) external
// Internal logic to determine execution readiness
function shouldExecuteIntent(Intent storage intent)
internal view
returns (bool)Intent Lifecycle:
- Creation -
createIntent()locks funds, stores compliance data - Execution - Chainlink calls
performUpkeep()โ triggers wallet transfer - Tracking - Each execution decrements commitment, preserves compliance
- Completion - Auto-deactivates when
transactionCount >= totalTransactionCount - Cancellation -
cancelIntent()releases remaining funds, clears failed amounts
Compliance Preservation:
- Compliance metadata stored once at intent creation
- Applied to every execution automatically
- Indexed by Envio for dashboard filtering
- Exported in CSV with jurisdiction/category columns
Factory for creating ERC-1167 minimal proxy clones:
function createSmartAccount(address owner)
public
returns (address account)
{
bytes32 salt = keccak256(abi.encodePacked(owner));
address predicted = Clones.predictDeterministicAddress(
implementation,
salt,
address(this)
);
// Return existing if already deployed
if (predicted.code.length != 0) return predicted;
// Deploy new clone
account = Clones.cloneDeterministic(implementation, salt);
MpSmartWallet(payable(account)).initialize(owner);
userClones[owner] = account;
emit AccountCreated(account, owner);
}Benefits:
- Deterministic addresses (one wallet per owner address)
- Gas-efficient clones (~$0.10 deployment on Mantle)
- Compatible with ERC-4337 initCode
- Factory-based recovery mechanism
Technology: Google Gemini 2.5 Flash Lite via Vercel AI SDK
System Prompt Design: The AI is trained to extract structured payment data from natural language:
// Input: "Pay California W2 employees Alice and Bob $5000 monthly for 6 months"
// Extracted:
{
recipients: ["0xAlice...", "0xBob..."],
amounts: ["5000", "5000"],
interval: 2592000, // 30 days in seconds
duration: 15552000, // 6 months in seconds
compliance: {
jurisdiction: "US-CA",
category: "PAYROLL_W2",
entityIds: ["EMP-001", "EMP-002"],
referenceId: "2025-01" // Auto-generated period
}
}Key Features:
- Validates all parameters before tool execution
- Asks for missing data incrementally (never overwhelms user)
- Supports contacts (saved recipient names)
- Detects jurisdiction from context ("California" โ "US-CA")
- Infers category from keywords ("W2", "contractor", "invoice")
- Never fabricates data or uses defaults
Tool Architecture:
tools: {
execute_single_mp_token_transfer: { /* Single payment */ },
execute_batch_mp_token_transfer: { /* Multi-recipient */ },
execute_recurring_mp_token_payment: { /* Scheduled payments */ }
}Schema:
type Contact = {
id: string;
userId: string; // Wallet address
name: string; // "Alice", "Engineering Team"
type: 'individual' | 'group';
addresses: Array<{
id: string;
address: string;
label?: string;
}>;
}Integration with AI: When user says "pay Alice", AI checks contacts first before asking for address:
// Contact resolution in system prompt
if (name in contacts) {
use contacts[name].addresses
} else {
ask "What's Alice's wallet address?"
}Real-Time Aggregation:
query WalletActivity($walletId: String!) {
Wallet(where: { id: { _eq: $walletId } }) {
transactions(
order_by: { timestamp: desc }
where: {
transactionType: { _in: [INTENT_CREATED, INTENT_EXECUTION] }
}
) {
details # JSON string with compliance data
}
}
}Client-Side Filtering:
// Filter by jurisdiction
const caPayments = transactions.filter(tx =>
tx.details.compliance?.jurisdiction === "US-CA"
);
// Filter by category
const w2Payments = transactions.filter(tx =>
tx.details.compliance?.category === "PAYROLL_W2"
);
// Generate CSV
const csv = transactions.map(tx => [
tx.timestamp,
tx.details.scheduleName,
tx.details.totalAmount,
tx.details.compliance?.jurisdiction,
tx.details.compliance?.category
]).join('\n');Event Handlers:
The indexer transforms raw events into queryable transaction history:
// MpIntentRegistry.IntentCreated
MpIntentRegistry.IntentCreated.handler(async ({ event, context }) => {
// Extract compliance tuple from event
const compliance = {
entityIds: event.params.compliance[0],
jurisdiction: event.params.compliance[1],
category: event.params.compliance[2],
referenceId: event.params.compliance[3]
};
// Store Intent entity for future execution correlation
context.Intent.set({
id: event.params.intentId,
compliance: compliance,
// ... other fields
});
// Create Transaction entity
context.Transaction.set({
id: event.transaction.hash,
wallet_id: event.params.wallet,
transactionType: "INTENT_CREATED",
details: JSON.stringify({
scheduleName: event.params.name,
compliance: compliance,
// ... other fields
})
});
});
// MpIntentRegistry.IntentExecuted
MpIntentRegistry.IntentExecuted.handler(async ({ event, context }) => {
// Lookup original intent to get compliance data
const intent = await context.Intent.get(event.params.intentId);
// Create execution transaction with preserved compliance
context.Transaction.set({
transactionType: "INTENT_EXECUTION",
details: JSON.stringify({
scheduleName: event.params.name,
executionNumber: event.params.transactionCount,
compliance: intent.compliance, // Compliance preserved!
// ... other fields
})
});
});Schema Design:
type Transaction {
id: ID!
wallet_id: String!
transactionType: TransactionType!
# Complete transaction details as JSON
# Includes compliance data for filtering
details: String!
}
type Intent {
# Helper entity for correlation
id: ID!
compliance: ComplianceMetadata
}Why JSON Details?
- Flexible schema (can add fields without migration)
- Client-side filtering is fast with modern browsers
- Preserves exact structure from contracts
- Easy CSV export generation
Scenario: Global startup with team across US, UK, and Nigeria
Input:
"Run monthly payroll for 12 months starting February 1st:
- Alice $6000 W2 California
- Bob ยฃ4000 contractor UK
- Charlie โฆ800,000 contractor Nigeria"
Execution:
- AI extracts 3 recipients with individual compliance data
- Creates intent with compliance array:
{ recipients: [alice, bob, charlie], amounts: ["6000", "4000", "800000"], compliance: { entityIds: ["EMP-001", "CTR-001", "CTR-002"], jurisdiction: "US-CA", // Applied to Alice category: "PAYROLL_W2" } // Bob and Charlie get their own jurisdiction/category via per-recipient tracking }
- Chainlink executes monthly for 12 months
- Each execution preserves jurisdiction/category
- Dashboard shows:
- US-CA: $72,000 (W2)
- UK: ยฃ48,000 (Contractor)
- NG: โฆ9,600,000 (Contractor)
Export:
Date,Name,Amount,Currency,Jurisdiction,Category,Entity
2025-02-01,Alice,6000,USD,US-CA,PAYROLL_W2,EMP-001
2025-02-01,Bob,4000,GBP,UK,CONTRACTOR,CTR-001
2025-02-01,Charlie,800000,NGN,NG,CONTRACTOR,CTR-002
...Scenario: Software company with 10 US-based 1099 contractors
Input:
"Pay 10 contractors $15,000 each quarterly for 2025:
- Mark, Sarah, Tom (California)
- Lisa, John (New York)
- Others (Texas)
Label as 1099 payments with quarterly periods"
Execution:
- Creates 4 intents (Q1, Q2, Q3, Q4) with:
{ category: "PAYROLL_1099", jurisdiction: "US-CA" | "US-NY" | "US-TX", referenceId: "2025-Q1" | "2025-Q2" | "2025-Q3" | "2025-Q4", entityIds: ["CTR-001", "CTR-002", ...] }
- Executes automatically each quarter
- Dashboard aggregates:
- Total 1099: $600,000 (10 contractors ร $15k ร 4 quarters)
- By state: CA $180k, NY $120k, TX $300k
Tax Season:
- Filter:
category=PAYROLL_1099 AND year=2025 - Export โ CSV with contractor IDs and state codes
- Hand to accountant โ Ready for 1099 form generation
Scenario: Agency managing multiple international vendors
Input:
"Process monthly vendor payments:
- UK hosting provider ยฃ500 (invoice INV-2025-001)
- Nigerian design agency โฆ200,000 (invoice INV-2025-002)
- German legal services โฌ2000 (PO-2025-003)"
Execution:
- Creates 3 separate recurring intents:
[ { category: "INVOICE", jurisdiction: "UK", referenceId: "INV-2025-001" }, { category: "INVOICE", jurisdiction: "NG", referenceId: "INV-2025-002" }, { category: "VENDOR", jurisdiction: "EU-DE", referenceId: "PO-2025-003" } ]
- Executes monthly automatically
- Dashboard tracks:
- Invoices vs recurring vendors
- Spending by jurisdiction
- Reference ID correlation
Audit Time:
- Filter:
referenceId=INV-2025-001 - See entire payment history for that invoice
- Immutable on-chain proof of payment
- Export with jurisdiction for international accounting
- Language: Solidity 0.8.28
- Framework: Foundry
- Standards: ERC-4337 (Account Abstraction), ERC-1167 (Minimal Proxies)
- Dependencies:
- OpenZeppelin Contracts v5.5.0
- Account Abstraction v0.9.0
- Chainlink Brownie Contracts v1.3.0
- Framework: Next.js 16 (App Router)
- Styling: Tailwind CSS v4 + Shadcn UI
- State Management: TanStack Query v5
- AI/NLP: Vercel AI SDK + Google Gemini 2.5 Flash Lite
- Auth: Privy v3 (Embedded Wallets)
- Web3: Viem v2 + Permissionless.js v0.2
- Network: Mantle Sepolia Testnet (Chain ID 5003)
- Bundler: Pimlico (ERC-4337 bundler + paymaster)
- Automation: Chainlink Automation
- Indexing: Envio HyperIndex (GraphQL)
- Database: Neon Postgres + Drizzle ORM
mantlepay/
โโโ apps/
โ โโโ web/ # Next.js frontend
โ โโโ app/
โ โ โโโ (protected)/ # Auth-gated routes
โ โ โ โโโ deploy/ # Wallet activation
โ โ โ โโโ wallet/ # Main dashboard
โ โ โโโ api/
โ โ โ โโโ chat/ # AI endpoint
โ โ โ โโโ chats/ # Chat history
โ โ โ โโโ contacts/ # Contact CRUD
โ โ โโโ login/ # Auth page
โ โโโ components/
โ โ โโโ chat/ # AI chat interface
โ โ โ โโโ chat.tsx # Main chat component
โ โ โ โโโ ChatInput.tsx
โ โ โ โโโ ChatMessages.tsx
โ โ โ โโโ ToolRenderer.tsx # Displays payment UIs
โ โ โ โโโ tools/ # Individual payment tools
โ โ โโโ dashboard/ # Analytics & reporting
โ โ โ โโโ ComplianceSummary.tsx # Jurisdiction view
โ โ โ โโโ PayrollDashboard.tsx # Compliance dashboard
โ โ โ โโโ PaymentTable.tsx # Active intents
โ โ โโโ contacts/ # Contact management
โ โ โโโ wallet/ # Wallet UI components
โ โโโ hooks/
โ โ โโโ payments/ # Payment execution hooks
โ โ โ โโโ types.ts # ComplianceMetadata types
โ โ โ โโโ useSingleTransfer.ts
โ โ โ โโโ useBatchTransfer.ts
โ โ โ โโโ useRecurringPayment.ts
โ โ โโโ useContacts.ts
โ โ โโโ useWalletHistory.ts # GraphQL queries
โ โโโ lib/
โ โ โโโ abi/ # Contract ABIs
โ โ โโโ chat-store.ts # Chat persistence
โ โ โโโ contact-store.ts # Contact persistence
โ โ โโโ customSmartAccount.ts # ERC-4337 account impl
โ โ โโโ smartAccountClient.ts # Permissionless client
โ โ โโโ envio/
โ โ โโโ client.ts # GraphQL client
โ โโโ db/
โ โโโ schema.ts # Drizzle schema
โ โโโ migrations/
โ
โโโ packages/
โ โโโ contracts/ # Foundry workspace
โ โ โโโ src/
โ โ โ โโโ MpSmartWallet.sol # ERC-4337 account
โ โ โ โโโ MpIntentRegistry.sol # Payment scheduler
โ โ โ โโโ MpSmartWalletFactory.sol # Clone factory
โ โ โ โโโ IMpSmartWallet.sol # Interface
โ โ โโโ script/ # Deployment scripts
โ โ โโโ test/ # Foundry tests
โ โ โโโ abi/ # Generated ABIs
โ โ
โ โโโ indexer/ # Envio indexer
โ โโโ config.yaml # Contract config
โ โโโ schema.graphql # GraphQL schema
โ โโโ src/
โ โโโ EventHandlers.ts # Event processing logic
โ
โโโ docs/ # Documentation
- Node.js v18+
- pnpm v8+
- Foundry (for contracts)
- Docker (for indexer)
- Clone the repository
git clone https://github.com/Stoneybro/MantlePay.git
cd MantlePay- Install dependencies
pnpm install- Configure environment variables
# Web app
cp apps/web/.env.example apps/web/.env.local
# Indexer
cp packages/indexer/.env.example packages/indexer/.envRequired variables:
# apps/web/.env.local
NEXT_PUBLIC_PRIVY_APP_ID= # Privy app ID
PIMLICO_API_KEY= # Pimlico bundler key
NEXT_PUBLIC_PIMLICO_SPONSOR_ID= # Paymaster policy ID
OPENAI_API_KEY= # For AI (or use Gemini)
DATABASE_URL= # Postgres connection string
# packages/indexer/.env
ENVIO_API_TOKEN= # Envio API token1. Start the web application:
pnpm dev
# or
pnpm --filter web devVisit http://localhost:3000
2. Run the indexer (requires Docker):
cd packages/indexer
pnpm devGraphQL playground at http://localhost:8080
3. Run contract tests:
pnpm contracts:testMpIntentRegistry: 0x5D16F29E70e90ac48C7F4fb2c1145911a774eFbF
MpSmartWalletFactory: 0xd63E841AAb10D118a3cb541FbeF011eBae6437C6
MpSmartWallet (impl): 0x6c6b5c86752D8B5330Cb055A967E2f6253D09195
cd packages/contracts
# 1. Deploy Intent Registry
forge script script/DeployMpIntentRegistry.s.sol:DeployMpIntentRegistry \
--rpc-url $MANTLE_SEPOLIA_RPC \
--private-key $PRIVATE_KEY \
--broadcast
# 2. Deploy Wallet Implementation
forge script script/DeployMpSmartWalletImplementation.s.sol:DeployMpSmartWalletImplementation \
--rpc-url $MANTLE_SEPOLIA_RPC \
--private-key $PRIVATE_KEY \
--broadcast
# 3. Deploy Factory
forge script script/DeployMpSmartWalletFactory.s.sol:DeployMpSmartWalletFactory \
--rpc-url $MANTLE_SEPOLIA_RPC \
--private-key $PRIVATE_KEY \
--broadcast- Reentrancy Protection: All payment functions use OpenZeppelin's
ReentrancyGuard - Commitment Tracking: Prevents double-spending of funds locked in intents
- Access Control:
- Only owner or EntryPoint can execute transactions
- Only registry can modify commitments
- Factory-based deterministic deployment
- Signature Validation: EIP-191 + EIP-1271 support for off-chain tooling
- Fund Safety:
- Failed transfers tracked separately
- Cancellation releases remaining funds
- Available balance checks prevent overcommitment
- Non-Custodial: Users maintain full control via Privy embedded wallets
- Audited Patterns: Built on OpenZeppelin and account-abstraction standards
- Decentralized Automation: Chainlink ensures trustless execution
- Immutable Records: All compliance data stored on-chain permanently
- ERC-4337 smart wallet with compliance metadata
- Intent registry with Chainlink Automation
- AI-powered payment parsing
- Multi-recipient batch payments
- Recurring payment schedules
- Transaction history indexing
- Basic compliance dashboard
- Contact management system
- Enhanced compliance dashboard with advanced filtering
- One-click CSV exports for accountants
- Multi-jurisdiction tax report templates
- Payroll calendar view
- Failed payment recovery UI
- Multi-signature approval workflows
- Invoice management integration
- PDF tax form generation (1099, W2)
- Fiat on/off-ramps
- Mobile app (React Native)
- Multi-chain support (Arbitrum, Optimism)
- QuickBooks/Xero integration
- Accountant role with read-only access
We welcome contributions! This is an open-source project built for the Mantle Global Hackathon 2025.
Areas for Contribution:
- Additional jurisdiction support
- Tax category expansion
- UI/UX improvements
- Documentation
- Testing
MIT License - see LICENSE for details.
- Live Demo: mantlepay.vercel.app (coming soon)
- Documentation: docs.mantlepay.xyz (coming soon)
- Twitter: @MantlePay (coming soon)
- Mantle Network: mantle.xyz
- Hackathon: Mantle Global Hackathon 2025
Mantle Global Hackathon 2025 - RWA/RealFi Track
MantlePay demonstrates how compliance metadata can become a first-class primitive in Web3 payments, enabling businesses to operate globally with the same audit-ready infrastructure they expect from traditional financeโbut with the transparency, automation, and cost-efficiency of blockchain technology.
Built with โค๏ธ by Zion Livingstone