# Tatum SDK Integration for ChainID 138 This directory contains the Tatum SDK integration for DeFi Oracle Meta Mainnet (ChainID 138). ## Overview The Tatum SDK allows you to interact with ChainID 138 using a familiar SDK interface while all JSON-RPC traffic goes to your own RPC endpoints. **Important Notes:** - With custom RPC, **only RPC calls are redirected to your node** - Tatum's cloud services (Notifications, Blockchain Data, etc.) **won't work** on unsupported/private chains - Only raw JSON-RPC calls will work - Transactions must be signed with `chainId: 138` (EIP-155) ## Installation ```bash cd sdk npm install ``` ## Configuration 1. Copy `.env.example` to `.env`: ```bash cp .env.example .env ``` 2. Update `.env` with your RPC endpoint: ```env RPC_URL=http://your-rpc-endpoint:8545 WS_URL=ws://your-rpc-endpoint:8546 ``` ## Usage ### Basic Connection Test ```bash npm run test ``` ### Run Examples ```bash # Basic usage example npm run example:basic # Send transaction example npm run example:transaction # Deploy contract example npm run example:contract # Comprehensive smoke test npm run smoke-test ``` ### Programmatic Usage ```typescript import { initTatumSDK, verifyConnection } from './tatum-client'; // Initialize Tatum SDK const tatum = await initTatumSDK({ rpcUrl: 'http://localhost:8545', verbose: true, }); // Verify connection const connectionInfo = await verifyConnection(tatum); console.log('Chain ID:', connectionInfo.chainId); console.log('Current Block:', connectionInfo.blockNumber); // Make RPC calls const blockNumber = await tatum.rpc.request('eth_blockNumber', []); const gasPrice = await tatum.rpc.request('eth_gasPrice', []); ``` ### Sending Transactions ```typescript import { ethers } from 'ethers'; import { CHAIN_ID, DEFAULT_RPC_URL } from './config'; // Initialize provider with ChainID 138 const provider = new ethers.JsonRpcProvider(DEFAULT_RPC_URL, { chainId: CHAIN_ID, name: 'defi-oracle-mainnet', }); // Create wallet const wallet = new ethers.Wallet(PRIVATE_KEY, provider); // Send transaction (must include chainId: 138) const tx = await wallet.sendTransaction({ to: '0xRecipientAddress...', value: ethers.parseEther('0.01'), chainId: CHAIN_ID, // Important: Must be 138 }); await tx.wait(); ``` ## Examples ### Example 1: Basic Connection See `src/examples/basic-usage.ts` for a complete example of connecting to ChainID 138 and querying chain data. ### Example 2: Send Transaction See `src/examples/send-transaction.ts` for an example of sending a transaction with proper chainId. ### Example 3: Deploy Contract See `src/examples/deploy-contract.ts` for an example of deploying and interacting with a smart contract. ## Verification Checklist - [ ] RPC node is up and accessible at the configured URL - [ ] ChainID is 138 (0x8a in hex) - [ ] Tatum SDK initialized with custom `rpcUrl` - [ ] Transactions signed with `chainId: 138` - [ ] RPC calls are working correctly ## Troubleshooting ### Connection Issues 1. **RPC endpoint not responding** - Verify RPC node is running - Check firewall/network settings - Verify RPC_URL in .env 2. **Chain ID mismatch** - Verify genesis file has chainId: 138 - Check node configuration - Ensure transactions use chainId: 138 3. **Transaction failures** - Verify chainId is set to 138 - Check account has sufficient balance - Verify gas price and limits ### Common Errors - **"Chain ID mismatch"**: Ensure all transactions use `chainId: 138` - **"RPC endpoint not reachable"**: Check network connectivity and firewall - **"Insufficient balance"**: Fund the account with ETH ## Limitations As mentioned in the Tatum documentation: - Only RPC calls work with custom RPC endpoints - Tatum's cloud services (Notifications, Blockchain Data) won't work - No indexer support for private chains - Only raw JSON-RPC is available ## References - [Tatum SDK Documentation](https://docs.tatum.io/docs/configuration-options) - [Ethereum JSON-RPC API](https://ethereum.org/developers/docs/apis/json-rpc/) - [EIP-155: Simple replay attack protection](https://eips.ethereum.org/EIPS/eip-155) ## Support For issues or questions, please open an issue on the project repository.