🚀 Universal Arc Kit SDK - Complete Guide
🎯 What This SDK Does
Your Situation:
- ✅ You have a smart contract application **deployed on Monad Network**
- ✅ You want users to interact with it **from any blockchain** (Ethereum, Polygon, Solana, etc.)
- ✅ You don't want users to switch networks or bridge funds
The Solution:
Wrap your application component with `ArcUniversalAppKit`. Put your `
What Happens:
- User connects wallet on **their preferred chain** (any chain)
- User triggers operations through your app
- Operations are automatically forwarded to **Monad Network**
- Execution happens on **Monad Network** (where your app lives)
- User never leaves their chain! ✨
🚀 Quick Start
Step 1: Install
npm install @arc/universal-app-kitStep 2: Wrap Your Application
import { ArcUniversalAppKit } from "@arc/universal-app-kit";
function MyApp() {
return (
<ArcUniversalAppKit
RELAYER_ADDRESS="0xdAF0182De86F904918Db8d07c7340A1EfcDF8244"
ARC_EXECUTOR_ADDRESS="0x90Dfd581393104EAe03Fd349b4867A7E8F51313b"
Application_deployed_address="0x5E6658ac6cBC9b0109C28BED00bC4Af0F0A3f1CD"
ARC_GATEWAY_ADDRESS="0xD5Bb85Ee81342ea97A240b21156d33cb3a4Df985"
Application_abi={ApplicationABI}
>
<YourApp/>
</ArcUniversalAppKit>
);
}That's it! Your application is now accessible from any blockchain.
📋 What You Need
- **Your Application Contract Address** (deployed on Monad Network)
- **Your Application ABI** (from deployment artifacts or block explorer)
- **Arc Infrastructure Addresses** (provided by Monad Network):
- `RELAYER_ADDRESS`
- `ARC_EXECUTOR_ADDRESS`
- `ARC_GATEWAY_ADDRESS`
🔄 How It Works
User on Any Chain (Ethereum/Polygon/Solana/etc.)
│
│ 1. User triggers operation
▼
ArcUniversalAppKit Wrapper
│
│ 2. Forwards intent to Gateway
▼
Arc Gateway (Source Chain)
│
│ 3. Relayer picks up event
▼
Arc Relayer (Off-Chain)
│
│ 4. Executes on Arc Network
▼
Arc Executor (Monad Chain)
│
│ 5. Calls your application contract
▼
Your Application (Monad Chain)
│
└─▶ Operation completed on Monad! ✅Key Points:
- ✅ User stays on their preferred chain
- ✅ No network switching required
- ✅ No bridging needed
- ✅ All operations settle on Monad Network
- ✅ Your app logic remains unchanged
📝 Prerequisites
1. Deploy Your Contract on Monad Network
Your application contract must be deployed on Monad Network. This is where all operations will execute and state will be stored.
2. Get Your Contract ABI
Extract the ABI from your deployment artifacts:
# From Hardhat
cat artifacts/contracts/MyApp.sol/MyApp.json | jq .abi > MyApp.abi.jsonOr copy it from:
- Your IDE/compiler output
- Monad block explorer
3. Get Arc Infrastructure Addresses
Contact Arc Network to get:
- `RELAYER_ADDRESS`
- `ARC_EXECUTOR_ADDRESS`
- `ARC_GATEWAY_ADDRESS`
💡 Example Usage
Simple Example
import { ArcUniversalAppKit } from "@arc/universal-app-kit";
// Your app's ABI
const MY_APP_ABI = [
{
inputs: [{ name: "_value", type: "uint256" }],
name: "setValue",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
// ... rest of your ABI
] as const;
function App() {
return (
<ArcUniversalAppKit
RELAYER_ADDRESS="0xdAF0182De86F904918Db8d07c7340A1EfcDF8244"
ARC_EXECUTOR_ADDRESS="0x90Dfd581393104EAe03Fd349b4867A7E8F51313b"
Application_deployed_address="0x5E6658ac6cBC9b0109C28BED00bC4Af0F0A3f1CD"
ARC_GATEWAY_ADDRESS="0xD5Bb85Ee81342ea97A240b21156d33cb3a4Df985"
Application_abi={ApplicationABI}
>
<YourApp/>
</ArcUniversalAppKit>
);
}⚠️ Troubleshooting
"Wallet not connected"
Ensure the user has connected their wallet before using the component.
"Wrong network"
Users can connect from any chain - the wrapper handles cross-chain communication automatically.
"Function encoding failed"
Verify your ABI matches your deployed contract exactly. Check function names, parameter types, and order.
"Intent not executing"
- Verify your contract is deployed on Monad Network
- Check all addresses are correct
- Ensure relayer is running (contact Monad Network support)
🎉 That's It!
Your Monad-deployed application is now accessible from any blockchain. Users can interact with your app while staying on their preferred chain - no network switching or bridging required!