SDK Reference
Status: The
@noderr/sdkpackage is not yet published. This document describes the planned SDK interface. For current integration, use the Agent Protocol REST API directly, or interact with the smart contracts via viem or ethers.js v6 using the contract ABIs and addresses listed in Contract Addresses.
Current Integration Path
Until the SDK is published, the recommended integration paths are:
For AI agents: Use the Agent Protocol REST API at https://agent.noderr.xyz. No contract interaction required — the API handles on-chain transactions server-side.
For dApp developers: Use viem or ethers.js v6 directly with the contract ABIs. See Smart Contract Integration for examples.
Planned SDK Interface (Reference Only)
The following documents the planned @noderr/sdk interface for reference. These APIs are subject to change before publication.
Planned Installation
npm install @noderr/sdk
# or
yarn add @noderr/sdk
# or
pnpm add @noderr/sdk
Planned Quick Start
import { NoderrClient } from'@noderr/sdk';
const client = new NoderrClient({
chainId: 84532, // Base SepoliarpcUrl: 'https://sepolia.base.org',
});
// Get all vaultsconst vaults = await client.vaults.getAll();
// Get vault detailsconst vault = await client.vaults.get('0xd62f6c4Fe1444Dafbe3dBd0163C4B77A3C41Af84');
console.log(`TVL: ${vault.tvlUsd}`);
Planned Modules
Vaults
// Get all vaultsconst vaults = await client.vaults.getAll();
// Get vault by addressconst vault = await client.vaults.get(address);
// Get user position in vaultconst position = await client.vaults.getUserPosition(vaultAddress, userAddress);
ERC-7540 Operations
// Request deposit (ERC-7540 async flow)const requestId = await client.vaults.requestDeposit(
vaultAddress,
amount, // in wei
receiverAddress
);
// Claim deposit (receive shares after fulfillment)const shares = await client.vaults.claimDeposit(vaultAddress, receiverAddress);
// Request redeemconst redeemRequestId = await client.vaults.requestRedeem(
vaultAddress,
shares,
receiverAddress,
ownerAddress
);
// Claim redeem (receive assets)const assets = await client.vaults.claimRedeem(vaultAddress, receiverAddress);
Strategies
// Get all strategiesconst strategies = await client.strategies.getAll();
// Get strategy by IDconst strategy = await client.strategies.get(strategyId);
Governance
// Get all proposalsconst proposals = await client.governance.getProposals();
// Vote on proposalawait client.governance.vote(proposalId, support, reason);
Planned Types
interface Vault {
address: string;
name: string;
symbol: string;
tvl: bigint;
tvlUsd: number;
totalShares: bigint;
pricePerShare: bigint;
apy: {
current: number;
day7: number;
day30: number;
inception: number;
};
fees: {
management: number;
performance: number;
hurdle: number;
};
riskLevel: 'conservative' | 'moderate' | 'aggressive';
isERC7540: boolean;
fulfillmentDelay?: number;
}
interface Strategy {
id: string;
name: string;
status: 'shadow' | 'paper_trading' | 'live' | 'terminated';
riskScore: number;
sharpeRatio: number;
maxDrawdown: number;
allocation: bigint;
}
interface UserPosition {
vault: Vault;
shares: bigint;
value: bigint;
pnl: bigint;
pnlPercent: number;
}
Last Updated: February 2026