Files
smom-dbis-138/sdk/src/tatum-client.ts
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

104 lines
3.0 KiB
TypeScript

/**
* Tatum SDK client initialization for ChainID 138
*/
import { TatumSDK, Network, Ethereum, RpcNodeType } from '@tatumio/tatum';
import { getTatumConfig, CHAIN_ID, CHAIN_ID_HEX, NETWORK_CONFIG, TatumConfig } from './config';
/**
* Initialize Tatum SDK for ChainID 138
*
* Note: 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 will work.
*
* @param config Optional configuration
* @returns Initialized Tatum SDK instance
*/
export async function initTatumSDK(config?: TatumConfig) {
const tatumConfig = getTatumConfig(config);
// Option A: Simple initialization with custom RPC URL
const tatum = await TatumSDK.init<Ethereum>({
network: Network.ETHEREUM, // Use Ethereum network type for EVM compatibility
rpcUrl: tatumConfig.rpcUrl,
verbose: tatumConfig.verbose,
// apiKey is optional and only needed for Tatum cloud features
// With custom RPC, cloud features won't work anyway
...(tatumConfig.apiKey && { apiKey: tatumConfig.apiKey }),
});
return tatum;
}
/**
* Initialize Tatum SDK with explicit node configuration
*
* @param config Optional configuration
* @returns Initialized Tatum SDK instance
*/
export async function initTatumSDKWithNodes(config?: TatumConfig) {
const tatumConfig = getTatumConfig(config);
// Option B: Explicit node configuration
const tatum = await TatumSDK.init<Ethereum>({
network: Network.ETHEREUM,
rpc: {
nodes: [
{
url: tatumConfig.rpcUrl!,
type: RpcNodeType.NORMAL,
},
],
},
verbose: tatumConfig.verbose,
...(tatumConfig.apiKey && { apiKey: tatumConfig.apiKey }),
});
return tatum;
}
/**
* Verify connectivity and chain ID
*
* @param tatum Tatum SDK instance
* @returns Object with block number and chain ID
*/
export async function verifyConnection(tatum: Ethereum) {
try {
// Get current block number
const blockNumberHex = await tatum.rpc.request('eth_blockNumber', []);
const blockNumber = parseInt(blockNumberHex as string, 16);
// Get chain ID
const chainIdHex = await tatum.rpc.request('eth_chainId', []);
const chainId = parseInt(chainIdHex as string, 16);
// Verify chain ID
if (chainId !== CHAIN_ID) {
throw new Error(
`Chain ID mismatch! Expected ${CHAIN_ID} (${CHAIN_ID_HEX}), got ${chainId} (${chainIdHex})`
);
}
// Get network version
const netVersion = await tatum.rpc.request('net_version', []);
// Get sync status
const syncing = await tatum.rpc.request('eth_syncing', []);
return {
blockNumber,
blockNumberHex,
chainId,
chainIdHex,
netVersion,
syncing,
networkConfig: NETWORK_CONFIG,
};
} catch (error) {
throw new Error(`Failed to verify connection: ${error instanceof Error ? error.message : String(error)}`);
}
}