Skip to main content

Installation & Setup

The Intuition SDK is a comprehensive TypeScript library for building applications on the Intuition protocol. This guide covers installation, configuration, and getting your development environment ready.

Prerequisites​

  • Node.js: Version 18.x or higher
  • Package Manager: npm, pnpm, yarn, or bun
  • TypeScript (recommended): Version 5.x or higher

Auto-Generated Package Documentation​

For a complete list of 0xintuition/sdk functions and interfaces, see the Intuition SDK documentation.

For a complete list of 0xintuition/protocol functions and interfaces, see the Intuition Protocol documentation.

For a complete list of 0xintuition/graphql functions and interfaces, see the Intuition Protocol documentation.

Installation​

Install the SDK using your preferred package manager:

npm install @0xintuition/sdk viem@^2.0.0
note

The SDK requires viem@2.x as a peer dependency. Viem is a lightweight, type-safe Ethereum library that powers all blockchain operations.

Verify Installation​

Create a test file to verify everything is working:

test-install.ts
import {
intuitionTestnet,
getMultiVaultAddressFromChainId,
} from '@0xintuition/sdk';

console.log('Network:', intuitionTestnet.name);
console.log('Chain ID:', intuitionTestnet.id);
console.log(
'MultiVault:',
getMultiVaultAddressFromChainId(intuitionTestnet.id),
);

Run it with npx tsx test-install.ts or your preferred TypeScript runner.


Client Configuration​

The SDK uses Viem clients for blockchain interactions. You need two types:

Client TypePurposeRequired For
Public ClientRead-only operationsQuerying data, checking balances
Wallet ClientWrite operationsCreating atoms, triples, deposits

Basic Setup​

import {
intuitionTestnet,
getMultiVaultAddressFromChainId,
} from '@0xintuition/sdk';
import { createPublicClient, createWalletClient, http } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';

// 1. Create account from private key
const account = privateKeyToAccount('0xYOUR_PRIVATE_KEY');

// 2. Create public client (for reading data)
const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: http(),
});

// 3. Create wallet client (for transactions)
const walletClient = createWalletClient({
chain: intuitionTestnet,
transport: http(),
account,
});

// 4. Get contract address
const address = getMultiVaultAddressFromChainId(intuitionTestnet.id);

Configuration Object​

Most SDK functions accept a configuration object:

import type { WriteConfig } from '@0xintuition/sdk';

const config: WriteConfig = {
address, // MultiVault contract address
publicClient, // For reading blockchain data
walletClient, // For sending transactions
};

Network Configuration​

The SDK supports multiple networks with built-in chain definitions.

Supported Networks​

NetworkChain IDTypeStatus
Intuition Mainnet1155Productionβœ… Active
Intuition Testnet13579Developmentβœ… Active
Base Mainnet8453Productionβœ… Active
Base Sepolia84532Developmentβœ… Active

Testnet Configuration​

import { intuitionTestnet } from '@0xintuition/sdk';
import { createPublicClient, http } from 'viem';

const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: http(),
});

// Network details available:
// Chain ID: 13579
// Currency: tTRUST
// RPC: https://testnet.rpc.intuition.systems/http
// Explorer: https://testnet.explorer.intuition.systems

Mainnet Configuration​

import { intuitionMainnet } from '@0xintuition/sdk';
import { createPublicClient, http } from 'viem';

const publicClient = createPublicClient({
chain: intuitionMainnet,
transport: http(),
});

// Network details available:
// Chain ID: 1155
// Currency: TRUST
// RPC: https://rpc.intuition.systems/http
// Explorer: https://explorer.intuition.systems

Contract Addresses​

The SDK provides utilities to get contract addresses for any supported network:

import {
getMultiVaultAddressFromChainId,
getContractAddressFromChainId,
intuitionDeployments,
} from '@0xintuition/sdk';

// Get MultiVault address (most commonly used)
const multiVaultAddress = getMultiVaultAddressFromChainId(chainId);

// Get other contract addresses
const trustBonding = getContractAddressFromChainId('TrustBonding', chainId);
const wrappedTrust = getContractAddressFromChainId('WrappedTrust', chainId);

Account Options​

Private Key​

import { privateKeyToAccount } from 'viem/accounts';

const account = privateKeyToAccount('0xYOUR_PRIVATE_KEY');

Mnemonic Phrase​

import { mnemonicToAccount } from 'viem/accounts';

const account = mnemonicToAccount('your twelve word mnemonic phrase goes here');

Browser Wallet (MetaMask, etc.)​

import { createWalletClient, custom } from 'viem';
import { intuitionTestnet } from '@0xintuition/sdk';

const walletClient = createWalletClient({
chain: intuitionTestnet,
transport: custom(window.ethereum),
});

Environment Variables​

Store sensitive data in environment variables:

.env
PRIVATE_KEY=0xYOUR_PRIVATE_KEY
INTUITION_PIN_API_KEY=your-intuition-pin-api-key
PINATA_API_JWT=your-pinata-jwt-token
config.ts
import { configureSdk } from '@0xintuition/sdk';
import { privateKeyToAccount } from 'viem/accounts';

const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);

configureSdk({
pinApiKey: process.env.INTUITION_PIN_API_KEY,
});

TypeScript Configuration​

For optimal TypeScript support:

tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"lib": ["ES2020"],
"moduleResolution": "bundler",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"resolveJsonModule": true
}
}

Advanced Configuration​

Custom RPC Endpoint​

const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: http('https://your-custom-rpc-endpoint.com'),
});

Fallback Transports​

Configure backup RPC endpoints for reliability:

import { fallback, http } from 'viem';

const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: fallback([
http('https://testnet.rpc.intuition.systems/http'),
http('https://backup-rpc.example.com'),
]),
});

Batch Requests (Multicall)​

Enable batching for multiple read operations:

const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: http(),
batch: {
multicall: true,
},
});

Complete Configuration Example​

intuition-client.ts
import {
configureSdk,
intuitionTestnet,
getMultiVaultAddressFromChainId,
} from '@0xintuition/sdk';
import type { WriteConfig } from '@0xintuition/sdk';
import { createPublicClient, createWalletClient, http, fallback } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';

// Account
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);

// Intuition pinning service
configureSdk({
pinApiKey: process.env.INTUITION_PIN_API_KEY,
});

// Public client with fallback and batching
const publicClient = createPublicClient({
chain: intuitionTestnet,
transport: fallback([
http('https://testnet.rpc.intuition.systems/http'),
http('https://backup-rpc.example.com'),
]),
batch: {
multicall: true,
},
});

// Wallet client
const walletClient = createWalletClient({
chain: intuitionTestnet,
transport: http('https://testnet.rpc.intuition.systems/http'),
account,
});

// Contract address
const address = getMultiVaultAddressFromChainId(intuitionTestnet.id);

// Export configuration
export const config: WriteConfig = {
address,
publicClient,
walletClient,
};

Optional: Pinata for IPFS​

For direct Pinata upload operations, you'll need a Pinata API token:

  1. Sign up at pinata.cloud
  2. Create an API key and get your JWT token
  3. Pass it in the config when using direct Pinata upload functions
import { createAtomFromIpfsUpload } from '@0xintuition/sdk';

const atom = await createAtomFromIpfsUpload(
{
walletClient,
publicClient,
address,
pinataApiJWT: 'your-pinata-jwt-token',
},
{
name: 'My Project',
description: 'A blockchain project',
},
);

Local Development​

For contributing or testing with a custom build:

git clone https://github.com/0xIntuition/intuition-ts.git
cd intuition-ts/packages/sdk
npm install
npm run build
npm link

# In your project
npm link @0xintuition/sdk

Troubleshooting​

Module Resolution Errors​

  1. Ensure viem is version ^2.0.0 or higher
  2. Check your tsconfig.json module resolution settings
  3. Clear cache and reinstall:
rm -rf node_modules package-lock.json
npm install

Type Errors​

  1. Ensure TypeScript version is 5.x or higher
  2. Update @types/node to the latest version
  3. Run npx tsc --noEmit to check for type errors

Package Information​


Next Steps​

See Also​