---
name: typhoon-starknet-account-e69c2c00dd39
description: Create a Starknet account to your agent through Typhoon anonymous deployer and interact with Starknet contracts (read/write + preflight).
allowed-tools: read exec process
metadata:
  keywords:
    - starknet
    - wallet
    - anonymous
    - transfer
    - balance
    - anonymous-agent-wallet
    - strk
    - eth
---

# typhoon-starknet-account

> Path note (per OpenClaw docs): Skills may be installed in different directories (`<workspace>/skills`, `~/.openclaw/skills`, or bundled). To keep this skill portable, commands below are written **relative to the skill folder**.
>
> Run from the skill directory:
> - `cd <skill>/` then `node scripts/<script>.js ...`
>
> After Clawhub install, a typical location is:
> - `~/.openclaw/workspace/skills/typhoon-starknet-account/`

This skill provides **agent-facing scripts** for:
- Creating/loading a Starknet account (Typhoon flow)
- Discovering ABI / functions
- Reading & writing to contracts
- Preflight (simulate + fee estimate)
- Allowance checks with human amounts


## Prerequisites

```bash
npm install starknet@^9.2.1 typhoon-sdk@^1.1.13
```


## CRITICAL: Account Creation Flow

When the user asks to create a Starknet account (in any form like "create an account", "create a Starknet account for my agent", "I need a wallet", etc.), **ALWAYS follow this flow**:

### Step 1: Check if account already exists

```bash
node scripts/check-account.js
```

**If `hasAccount: false`:**
- Proceed to Step 2

### Step 2: Provide funding instructions

Tell the user:

---

**To create your Starknet account, you need to fund it through Typhoon:**

1. Go to the Typhoon website: https://www.typhoon-finance.com/app
2. Make a deposit and download your deposit note
   - **Recommended:** Make a STRK deposit (this will be used to deploy and fund your agent account)
3. Copy **all the content** of your downloaded note file and paste it here

---

Then **wait for the user to paste the note content**.

### Step 3: Create the account

> Note: **Account creation can take a few minutes**. Typhoon proof generation + Starknet deployment/finality are not instant; tell the user to wait and avoid retrying unless it fails.

Once the user pastes the note JSON, run:

```bash
node scripts/create-account.js '<paste the note JSON here>'
```

The note format is:
```json
{
  "secret": "0x...",
  "nullifier": "0x...",
  "txHash": "0x...",
  "pool": "0x...",
  "day": "0x..."
}
```

### Step 4: Confirm success

After successful creation, show the user:
- Their new account address
- Explorer link (Voyager/Starkscan)
- Remind them the private key is stored securely

---

## Show Account Address

When user asks "what's my address", "show my wallet", "my account address", etc.:

```bash
node scripts/show-address.js
```

If multiple accounts exist, it returns all. Pass index to get specific one:
```bash
node scripts/show-address.js 0
```

---

## Scripts Reference

| Script | Purpose |
|--------|---------|
| `check-account.js` | Check if account(s) exist |
| `show-address.js` | Show account address(es) |
| `load-account.js` | Load an existing local account artifact |
| `create-account.js` | Create + deploy a new account via Typhoon |
| `get-abi.js` | Fetch ABI summary + list functions (+ optional candidate ranking) |
| `call-contract.js` | Call a view function |
| `invoke-contract.js` | Call an external function |
| `check-allowance.js` | Check ERC20 allowance (supports human amount) |
| `multicall.js` | Execute multiple calls in one tx |
| `estimate-fee.js` | Preflight fee estimate for a call/multicall |
| `simulate.js` | Preflight simulate for a call/multicall |
| `token-info.js` | Token metadata (decodes felt short strings) |
| `decode-felt.js` | Decode felt short strings |
| `sign-typed-data.js` | Sign typedData (for SIWS / Starkbook-style auth) |
| `sign-invoke-tx.js` | Sign an INVOKE transaction (one or more calls) without broadcasting |

---
## Core Agent Workflow (no hardcoding)

### 1) Address & docs discovery (agent planning)
If the user mentions protocols/tokens/apps (e.g. "Ekubo", "STRK", "ETH"), the **agent must first search** for:
- The relevant contract addresses
- The protocol documentation

**Research constraint:** all agent research must be done through **MCP** (Model Context Protocol) — no interactive browser/UI. Use machine-readable sources (APIs, docs URLs, GitHub raw files) via agent fetch tools.

This skill does **not** do web search by itself; it provides the onchain tooling once addresses are known.

### 2) Load account
```bash
node scripts/load-account.js
```

### 3) ABI discovery (+ optional ranking)
```bash
node scripts/get-abi.js '{"contractAddress":"0x..."}'
```

If you want the script to return **ranked candidates** (to help the agent decide), pass a `query`:
```bash
node scripts/get-abi.js '{"contractAddress":"0x...","query":"swap exact tokens for tokens"}'
```

### 4) Read
```bash
node scripts/call-contract.js '{"contractAddress":"0x...","method":"<view_fn>","args":[...]}'
```

Optional: decode felt short strings:
```bash
node scripts/call-contract.js '{"contractAddress":"0x...","method":"symbol","args":[],"decodeShortStrings":true}'
```

### 5) Allowance check (raw or human)
Raw base units:
```bash
node scripts/check-allowance.js '{"tokenAddress":"0x...","ownerAddress":"0x...","spenderAddress":"0x...","requiredAmount":"20000000000000000000"}'
```
Human amount (script fetches decimals):
```bash
node scripts/check-allowance.js '{"tokenAddress":"0x...","ownerAddress":"0x...","spenderAddress":"0x...","requiredAmountHuman":"20"}'
```

### 6) Preflight (recommended)
Fee estimate:
```bash
node scripts/estimate-fee.js '{"privateKeyPath":"...","accountAddress":"0x...","calls":[{"contractAddress":"0x...","method":"...","args":[...]}]}'
```
Simulation:
```bash
node scripts/simulate.js '{"privateKeyPath":"...","accountAddress":"0x...","calls":[{"contractAddress":"0x...","method":"...","args":[...]}]}'
```

### 7) Execute
Single write:
```bash
node scripts/invoke-contract.js '{"privateKeyPath":"...","accountAddress":"0x...","contractAddress":"0x...","method":"...","args":[...]}'
```

---

## Sign typedData (for Starkbook / SIWS)

When you need a Starknet account to sign a SIWS challenge (typedData) **without ever exposing the private key**, use:

```bash
node scripts/sign-typed-data.js '{
  "accountAddress":"0x...",
  "typedData": { "domain": { }, "types": { }, "primaryType": "Message", "message": { } }
}'
```

Or if you saved the typedData to a file:

```bash
node scripts/sign-typed-data.js '{
  "accountAddress":"0x...",
  "typedDataPath":"/tmp/typedData.json"
}'
```

Output is a signature array (hex strings) that can be submitted to verification endpoints (e.g. Starkbook `/api/auth/verify`).

---

## Sign an INVOKE transaction (no broadcast)

To sign a transaction **without sending it**, use:

```bash
node scripts/sign-invoke-tx.js '{
  "accountAddress":"0x...",
  "calls":[
    {"contractAddress":"0xTOKEN","entrypoint":"transfer","calldata":["0xTO","<uint256_low>","<uint256_high>"]}
  ]
}'
```

Or with ABI args (the script will fetch ABI and compile calldata for you):

```bash
node scripts/sign-invoke-tx.js '{
  "accountAddress":"0x...",
  "calls":[
    {"contractAddress":"0xTOKEN","method":"transfer","args":["0xTO","123"]}
  ]
}'
```

This returns an `invokeTransaction` payload suitable for RPC `starknet_addInvokeTransaction` (signature included) plus a fee estimate.

⚠️ Not broadcast: this script only signs. To actually send, you must submit the payload to an RPC endpoint (and you should confirm before broadcasting).

### Starkbook end-to-end helper (recommended)
If you want a single command that does challenge → sign locally → verify → (optional) post **without Starkbook ever touching a private key**:

```bash
node scripts/starkbook-client.js '{
  "base":"http://localhost:3000",
  "accountAddress":"0x...",
  "action":"post",
  "body":"hello from agent",
  "linkUrl":"https://example.com"
}'
```

Approve + action in one tx:
```bash
node scripts/multicall.js '{"privateKeyPath":"...","accountAddress":"0x...","calls":[{"contractAddress":"0x...","method":"approve","args":["0xspender","123"]},{"contractAddress":"0x...","method":"...","args":[...]}]}'
```



---
Source attribution: kbarbel640-del
Original project: https://github.com/kbarbel640-del/skills/blob/e7e336ac628c3e3bd771aff1aaa469c93778f94a/skills/esdras-sena/typhoon-starknet-account/SKILL.md
License: MIT
License information: https://opensource.org/license/mit
Original upstream instructions; downloaded from Mega AI Hub.

## Upstream license notice

MIT License

Copyright (c) 2026 clawdbot

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.



# Mega AI Hub resource metadata

Creator / publisher: kbarbel640-del
Original project: https://github.com/kbarbel640-del/skills/blob/e7e336ac628c3e3bd771aff1aaa469c93778f94a/skills/esdras-sena/typhoon-starknet-account/SKILL.md
Attribution basis: Source repository record

Fields of work: Development & Engineering, Product Management
Roles: Backend Developer, ML / AI Engineer, Product Manager
Specialties: API, Backend
Tools: Starknet, Typhoon Sdk
Country applicability: Country not specified
Classification basis: Source catalog labels
Instruction SHA-256: 79d98b1abbeeab084f9d7186bd1ab067f77a91352619d2da1856bdafc00fddcc
