One Wallet. Every App.
Your Rules.
Every app gives you a new wallet. New balance. New headache. We thought that was broken. So we built one wallet that works everywhere, where every app plays by your rules. Set what it can spend, how long it has access, and revoke it anytime.
Feels like (software),not (crypto).

Why MOSS Changes Everything
Every app built on MOSS removes the friction users hate and gives developers the primitives they actually need. Build apps that feel like software, not crypto.
Without MOSS
Feels like crypto

- Multiple wallets and fragmented balances
- Repeated signing and approval prompts
- Users need ETH to transact
- Complex onboarding and funding flows
- Users constantly leave your app
With MOSS
Feels like Software

- One wallet across every app
- Approve once, then interact continuously
- Gas handled: sponsor or pay with any token
- Built-in funding rails for every entry point
- Users stay inside your app
Feels like (software),not (crypto).

Why MOSS Changes Everything
Every app built on MOSS removes the friction users hate and gives developers the primitives they actually need. Build apps that feel like software, not crypto.
Without MOSS
Feels like crypto
Multiple wallets and fragmented balances
Repeated signing and approval prompts
Users need ETH to transact
Complex onboarding and funding flows
Users constantly leave your app
With MOSS
Feels like software, not crypto
One wallet across every app
Approve once, then interact continuously
Gas handled: sponsor or pay with any token
Built-in funding rails for every entry point
Users stay inside your app
Connect. Sign. Transfer.In 3 lines of code
MOSS handles the wallet iframe, secure messaging, session keys, and sponsored gas so you ship features, not plumbing.
Without MOSS
18 Lines,~60 min to integrate
// Raw ERC-4337 path
const bundler = createBundlerClient({
transport: http(bundlerUrl),
chain: megaeth,
});
const account = await toSmartAccount({
owner,
factory,
});
const userOp = await buildUserOp({
account,
calls,
});
const signature = await owner.signMessage(
hashUserOp(userOp),
);
const receipt = await bundler.waitForUserOpReceipt({
hash: await bundler.sendUserOp({ ...userOp, signature }),
});With MOSS
3 Lines, <10 min to integrate
import { mega } from '@megaeth-labs/wallet-sdk';
await mega.initialise({ network: 'mainnet' });
const result = await mega.transfer({
type: 'native',
to: '0xRecipient',
amount: parseEther('1'),
});Give your AI agents
a wallet they can
actually use.
MOSS is the execution and permission layer for AI agents in crypto applications. No private key exposure. No escrow contracts. No human approval loops.
One permission grant. Agent runs within bounds until it expires or you revoke it.
Raw EOA + private key
- xOne leaked key means total, irreversible loss
- xNo permission layer, no spend limits, no revocation
- xAgent has unconstrained access to all funds
Custom escrow contracts
- xUsers must deposit funds before agent can operate
- xEvery new rule needs a contract deployment
- xNew attack surface, weeks of engineering overhead
Human wallet SDKs
- xEvery action needs a human to click Confirm
- xSession keys grafted on, not first-class
- xCross-app execution requires separate connections
const wallet = new ethers.Wallet(process.env.AGENT_KEY); //key leaks = total loss. no limits.
const wallet = new ethers.Wallet(process.env.AGENT_KEY); //key leaks = total loss. no limits.
// the footgun everyone starts withconst wallet = new ethers.Wallet(process.env.AGENT_KEY); //key leaks = total loss. no limits.
No key management
- √Session keys live in MOSS infrastructure.
- √Your agent never touches them.
- √Call mega.revokePermissions() to stop the agent immediately.
No escrow contracts
- √Permissions apply directly to the wallet.
- √Zero contract deployment.
- √Reduced attack surface compared to escrow systems.
Scoped and time-bound
- √Per-app spend limits, daily caps, and automatic expiry in every grant.
- √Transactions confirm in under 10ms on MegaETH.
- √Temporary access windows reduce long-term risk exposure.
// Grant scoped permissions once. Agent runs silently.await mega.grantPermissions({permissions: {expiry: now + 86400,permissions: {calls: [{ to: wcmContractAddress, signature: 'executeLimitOrder(uint256)' }],spend: [{ limit: Value.fromEther('5'), period: 'day' }],}}});// Agent executes. No popup. No user present.const result = await mega.callContract({address: wcmContractAddress,abi: wcmAbi,functionName: 'executeLimitOrder',args: [orderId],silent: true, // key line});# CONFIRMED