Rohan Shield
Official# Rohan Protocol (v0.7.0)
[](https://www.npmjs.com/package/@rohan-protocol/sdk)
[](LICENSE)
[](https://midnight.network)
[](https://smithery.ai/servers/rohanprotocol/shield)
[](https://glama.ai/mcp/servers/rohan-protocol/sdk)
> **The Sovereign Privacy & Settlement Layer for Autonomous AI Agents on the Midnight Blockchain.**
Rohan Protocol equips autonomous AI agents with zero-knowledge intent commitments, confidential state transitions, and a complete, verifiable audit lifecycle. Sensitive parameters (budgets, vendor contracts, PII) are strictly canonicalized (RFC 8785) and hashed in client RAMβnever exposed on-chain or leaked in LLM context windows.
---
## π The Closed-Loop Multi-Agent Architecture
Rohan Protocol eliminates the classic "dead-end" MCP agent problem by establishing a complete, multi-turn lifecycle between coordinating agents:
```text
βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ
β Agent Alpha β β Agent Beta β β Agent Beta β β Agent Beta β
β (State Mutation) β β (State Inspection)β β (History Review) β β (Agreement Audit) β
βββββββββββ¬ββββββββββ βββββββββββ¬ββββββββββ βββββββββββ¬ββββββββββ βββββββββββ¬ββββββββββ
β β β β
β 1. rohan_execute_handshakeβ 2. rohan_get_ledger_stateβ 3. rohan_get_transaction_historyβ 4. rohan_verify_commitment
β (Confidential Payload)β (Read Anchored Root) β (Settlement Receipts) β (RFC 8785 In-Memory JCS)
βΌ βΌ βΌ βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Rohan Protocol Relayer β
β Midnight Preprod L1 Settlement & Paymaster β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
* **Step 1 β Write (`rohan_execute_handshake`):** Agent Alpha commits an intent. The Relayer verifies proof commitments and anchors the state root on Midnight Preprod L1. The legacy `rohan_zk_handshake` name remains accepted.
* **Step 2 β Read (`rohan_get_ledger_state`):** Agent Beta inspects the contract's anchored state root, block height, and transaction receipt from cache (0 Gas, <1 ms).
* **Step 3 β History (`rohan_get_transaction_history`):** Agent Beta lists recorded settlement transactions and receipts (0 Gas).
* **Step 4 β Verify (`rohan_verify_commitment`):** Agent Beta checks plaintext against its canonical SHA-256 payload digest in local RAM (0 Gas). This is the inner payload digest, not the outer on-chain `intentHash`.
---
## π οΈ The 4 MCP Lifecycle Tools
| Tool | Category | Gas Cost | Latency | Description |
| :--- | :--- | :--- | :--- | :--- |
| `rohan_execute_handshake` | Mutation / Write | Subsidized (Paymaster) | ~30s (L1 Block) | Executes a confidential state transition anchored on Midnight Preprod. The legacy `rohan_zk_handshake` alias is accepted. |
| `rohan_get_ledger_state` | Inspection / Read | 0 Gas | <1 ms (RAM Cache) | Reads current anchored state root, block height, and tx receipt from the 15s write-through cache. |
| `rohan_get_transaction_history` | Inspection / Read | 0 Gas | <1 ms (SQLite) | Lists recent recorded settlement transactions and receipts. |
| `rohan_verify_commitment` | Audit / Verify | 0 Gas | <1 ms (Local RAM) | Checks plaintext against its payload digest via RFC 8785 JCS + SHA-256; supply the inner payload digest, not the outer on-chain `intentHash`. |
---
## π¦ Monorepo Packages
* [`@rohan-protocol/sdk`](./packages/sdk): Core TypeScript SDK with cryptographic zeroization, RFC 8785 canonicalization, and state inspection client.
* [`@rohan-protocol/mcp`](./packages/mcp): Official Model Context Protocol (MCP) server for Claude Desktop, Cursor, Cline, and Gemini.
* [`@rohan-protocol/webmcp`](./packages/webmcp): Browser-native WebMCP shield with zero-width character sanitization (V-07).
---
## π Quickstart
### 1. Install SDK
```bash
npm install @rohan-protocol/sdk
```
### 2. Basic SDK Usage
```typescript
import { RohanClient, canonicalizeJson } from '@rohan-protocol/sdk';
const client = new RohanClient({
contractAddress: '585ac0c4448257507d8ffa2a89e2aa00abd86ec9e94bdb6f553bc83e05f4dd0e',
});
// 1. Inspect on-chain state (Read)
const state = await client.getLedgerState();
console.log('Current Root:', state.currentStateRoot, 'Block:', state.blockHeight);
// 2. Submit a confidential handshake (Write)
const receipt = await client.submitHandshake({
agentId: 'did:midnight:agent-alpha',
intent: 'Vendor Purchase Order #1042',
privateData: { budgetUsd: 75000, approvalCode: 'AUTH-99' },
});
console.log('Confirmed TxHash:', receipt.txHash);
// 3. Verify plaintext commitment locally (Verify)
const audit = await client.verifyCommitment(
{ budgetUsd: 75000, approvalCode: 'AUTH-99' },
receipt.intentHash
);
console.log('Cryptographic match?', audit.valid);
```
---
## π‘οΈ Security & Zero-Trust Principles
* **RFC 8785 JSON Canonicalization Scheme (JCS):** Deterministic, cross-platform key sorting and whitespace elimination.
* **DoS & ReDoS Guarding:** Recursive depth ceiling (max. 32 levels) and RAM payload bounds (max. 256 KB).
* **Zeroize RAM Sanitation:** Sensitive witnesses and private keys are scrubbed from RAM immediately after commitment derivation.
* **Optimistic Credit Escrow:** Atomic balance reservations prevent concurrent quota-drain exploits.
---
## π License
Apache-2.0. Copyright (c) 2026 Rohan Protocol Authors.
TDQS
Scored across 4 tools
Each tool maps to a clearly distinct action/resource: executing a confidential state transition, verifying a commitment digest, reading the current ledger state, and listing transaction history. The boundary between reading ledger state and listing transaction history is clear from the descriptions.
All tools use the same rohan_ prefix followed by a consistent verb_noun pattern (execute_handshake, get_transaction_history, verify_commitment, get_ledger_state). The convention is predictable throughout.
Four tools is well-scoped for a focused blockchain protocol server, and each tool has a clear, non-redundant role. There is no padding or extreme thinness given the domain.
The surface covers core operations: execute, verify, read state, and list history. Minor gaps exist, such as direct transaction/receipt lookup by hash or richer protocol query operations, but agents can likely work around them via history and state reads.