Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save andykimisgreat/be22b54da24827c41a8030495d683337 to your computer and use it in GitHub Desktop.

Select an option

Save andykimisgreat/be22b54da24827c41a8030495d683337 to your computer and use it in GitHub Desktop.
$ORBIT Base MCP
# Orbit Token Plugin
> [!IMPORTANT]
> ## STOP — COMPLETE BASE MCP ONBOARDING FIRST
>
> Before doing anything, you MUST:
> 1. Call `get_wallets` to get the user's wallet address
> 2. Confirm the user is on Base mainnet (chainId: 8453)
>
> The wallet address is REQUIRED for every mint call.
Orbit Token (ORBIT) is a mintable ERC-20 token on Base mainnet.
Mint price: **0.0000001 ETH (100 gwei) per ORBIT token**.
Total supply cap: 1,000,000,000 ORBIT (total 100 ETH if fully minted).
Execute mint via Base MCP's `send_calls`. No external API needed — calldata is constructed directly.
**Supported chain:** Base mainnet (`8453` / `base`)
---
## Contract Info
| Field | Value |
|---------------|----------------------------------------------|
| Contract | `0x2Fe1E2Df516BEB228E0BdED0c89bF58b690382A4` |
| Chain | Base mainnet (8453) |
| Mint price | 0.0000001 ETH (100 gwei) per token |
| Symbol | ORBIT |
| Max supply | 1,000,000,000 ORBIT |
---
## ABI (mint function only)
```json
[
{
"name": "mint",
"type": "function",
"stateMutability": "payable",
"inputs": [
{ "name": "to", "type": "address" },
{ "name": "amount", "type": "uint256" }
],
"outputs": []
},
{
"name": "getMintCost",
"type": "function",
"stateMutability": "view",
"inputs": [{ "name": "amount", "type": "uint256" }],
"outputs": [{ "name": "", "type": "uint256" }]
}
]
```
---
## Mint Flow
When the user says **"mint N $ORBIT"**:
### Step 1 — Get wallet address
```
call get_wallets → use the Base Account address as `to`
```
### Step 2 — Calculate value
```
amount = N (integer, whole tokens)
value = amount * 0.0000001 ETH = amount * 100000000000 wei (100 gwei)
Example: mint 1 ORBIT → value = 0x174876E800 (100,000,000,000 wei)
Example: mint 5 ORBIT → value = 0x746A528800 (500,000,000,000 wei)
Example: mint 10 ORBIT → value = 0xE8D4A51000 (1,000,000,000,000 wei)
Example: mint 100 ORBIT → value = 0x9184E72A000 (10,000,000,000,000 wei)
```
### Step 3 — Encode calldata
```
Function selector: keccak256("mint(address,uint256)") = 0x40c10f19
ABI encode: (address to, uint256 amount)
For mint(userAddress, 1):
data = 0x40c10f19
+ [userAddress padded to 32 bytes, left-zero-padded]
+ [amount padded to 32 bytes, left-zero-padded]
Example for address 0xAbCd...1234 minting 1 token:
data = 0x40c10f19
+ 000000000000000000000000AbCd...1234
+ 0000000000000000000000000000000000000000000000000000000000000001
```
### Step 4 — Call send_calls
```json
{
"chain": "base",
"calls": [
{
"to": "0x2Fe1E2Df516BEB228E0BdED0c89bF58b690382A4",
"value": "0x174876E800",
"data": "0x40c10f19[encoded_address_32bytes][encoded_amount_32bytes]"
}
]
}
```
### Step 5 — Present approval link
```
→ User approves in Base Account
→ call get_request_status(requestId) to confirm
→ Report: "✅ Successfully minted N ORBIT to [address]"
```
---
## Calldata Reference Table
| Mint amount | value (wei) | value (hex) |
|--------------|-----------------------|------------------|
| 1 ORBIT | 100,000,000,000 | 0x174876E800 |
| 2 ORBIT | 200,000,000,000 | 0x2E90EDD000 |
| 5 ORBIT | 500,000,000,000 | 0x746A528800 |
| 10 ORBIT | 1,000,000,000,000 | 0xE8D4A51000 |
| 100 ORBIT | 10,000,000,000,000 | 0x9184E72A000 |
| 1000 ORBIT | 100,000,000,000,000 | 0x5AF3107A4000 |
---
## Error Handling
| Error | Cause | Fix |
|------------------------|-------------------|-----------------------------------------|
| Insufficient ETH sent | value too low | Recalculate: amount × 0.0000001 ETH |
| Exceeds max supply | 1B cap reached | Inform user, no more minting available |
| Amount must be > 0 | zero amount | Ask user for valid amount (>0) |
---
## Full Orchestration Pattern
```
1. get_wallets → userAddress
2. Parse user intent: "mint N $ORBIT" → N (integer)
3. Calculate value = N * 100000000000 wei (100 gwei per token)
4. Encode calldata: mint(userAddress, N)
5. send_calls(chain="base", calls=[{to: 0x2Fe1E2Df516BEB228E0BdED0c89bF58b690382A4, value, data}])
6. Present approvalUrl → user approves in Base Account
7. get_request_status(requestId) → poll until confirmed
8. Reply: "✅ Minted N ORBIT to [userAddress] for [N×0.0000001] ETH"
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment