Skip to main content

Core SDK.

@cinacoin/core-sdk — CinaCoin 核心 SDK 参考。

Overview.

The Core SDK is the foundation of the CinaCoin ecosystem. It provides a complete, self-hosted wallet connection toolkit — a drop-in replacement for Reown/WalletConnect infrastructure — with unified chain adapter interfaces, session management, event handling, EIP-6963 wallet discovery, deep linking, EIP-5792 atomic batch transactions, and first-class adapters for 14+ chains.

Key capabilities:

  • Connector abstraction — uniform API across injected, QR, relay/WalletConnect wallets
  • Session management — state machine with persistence, expiry, and integrity checks
  • Multi-chain adapters — viem, wagmi, ethers v5/v6, Solana, Bitcoin, TON, TRON, Polkadot, Cosmos, Hedera, Sui, Starknet, NEAR, XRPL
  • EIP-5792 Wallet Call API — atomic batch transactions, capability detection
  • EIP-6963 wallet discovery — multi-injected provider detection
  • Deep linking — platform-aware redirects with universal link fallback

Installation.

npm install @cinacoin/core-sdk

Peer dependencies (optional).

Depending on which adapters you need:

npm install viem # for ViemChainAdapter
npm install wagmi viem # for WagmiConnector
npm install ethers@5 # for Ethers5Adapter
npm install ethers@6 # for Ethers6Adapter

Quick start.

Basic initialization.

import { CinaCoin } from '@cinacoin/core-sdk'

const cinacoin = new CinaCoin({
projectId: 'your-project-id',
relayUrl: 'wss://relay.cinacoin.com/v1',
chains: [mainnet, polygon],
})

Connect to a wallet.

import { Connector, SessionManager } from '@cinacoin/core-sdk'

const session = new SessionManager()
const connector = /* injected, QR, or relay connector */

// Listen for state changes
session.subscribe((state) => {
console.log('Session state:', state.status)
})

// Initiate connection
await session.initiate(connector, { chainId: 1 })

Dynamic adapter creation.

import { createAdapter } from '@cinacoin/core-sdk'

// Create any chain adapter dynamically
const tonAdapter = await createAdapter({
type: 'ton',
chains: TON_CHAINS,
})

const solanaAdapter = await createAdapter({
type: 'solana',
})

API reference.

Classes.

ExportDescription
ConnectorAbstract base class for all wallet connection methods (injected, QR, relay, walletconnect)
SessionManagerLifecycle state machine with persistence, expiry (24h TTL), and integrity validation
RedirectHandlerPlatform-aware deep link handler with smart redirect fallback
EventEmitterInternal event system for pub/sub patterns

Types.

ExportDescription
Chain, ChainNamespace, ChainReferenceChain identification and grouping
ConnectParams, ConnectionResultConnection input/output shapes
SessionStateDiscriminated union: 'disconnected' | 'connecting' | 'connected' | 'error'
CinaCoinState, ConnectionStatusState management types
ChainAdapter, ChainAdapterMethodsUnified adapter interface
EIP6963ProviderInfo, EIP1193ProviderEIP-6963 multi-injected provider types

Chain adapters.

AdapterExported FromKey Features
EvmAdapter./adapters/evm.jsBase EVM adapter
ViemChainAdapter./adapters/viem.jsviem integration
WagmiConnector./adapters/wagmi.jswagmi multi-chain support
Ethers5Adapter./adapters/ethers5.jsethers.js v5 bridge
Ethers6Adapter./adapters/ethers6.jsethers.js v6 bridge
SolanaChainAdapter./adapters/solana.jsSolana wallet support
BitcoinChainAdapter./adapters/bitcoin.jsBitcoin UTXO handling
TONChainAdapter./adapters/ton.jsTON address parsing, Jetton transfers
TRONChainAdapter./adapters/tron.jsTRON transactions, TRC20
PolkadotChainAdapter./adapters/polkadot.jsSS58 addresses, asset transfers
CosmosChainAdapter./adapters/cosmos.jsBech32, CosmWasm execution
HederaChainAdapter./adapters/hedera.jsHedera EVM, token/NFT handling
SuiChainAdapter./adapters/sui.jsBCS encoding, transaction builder
StarknetChainAdapter./adapters/starknet.jsCairo calldata, STRK/ETH tokens
NearChainAdapter./adapters/near.jsNEAR function calls, FT/NFT transfers
XrplChainAdapter./adapters/xrpl.jsXRPL payments, offers, NFTs

Cryptography.

ExportDescription
generateKeypair, sharedSecretX25519 keypair generation and Diffie-Hellman
encrypt, decrypt, deriveSymmetricKeyPayload encryption utilities
bytesToHex, hexToBytesEncoding helpers

EIP-5792 (Wallet Call API).

ExportDescription
walletGetCapabilitiesQuery wallet capabilities
walletSendCallsSend atomic batch of calls
walletGetCallsStatusPoll batch execution status
supportsAtomicBatchCheck batch transaction support
buildAtomicBatch, executeAtomicBatchBuild and execute atomic batches
createEthTransferCall, createContractCallIndividual call builders

EIP-6963 (Multi-injected provider).

ExportDescription
discoverWallets, watchWalletsDetect injected wallet providers
findWalletByRdnsLook up wallet by reverse DNS

Deep linking.

ExportDescription
generateDeepLinkBuild deep link URL for a wallet
smartRedirectPlatform-aware redirect with fallback
generateUniversalLinkUniversal link for mobile
detectPlatformDetect current platform (iOS/Android/Web)

Advanced usage.

Session persistence & security.

SessionManager persists session state to localStorage with automatic expiry (24h) and integrity validation. For production:

const session = new SessionManager()

// Restore previous session (validates expiry + integrity hash)
await session.restore()

// Subscribe to state changes
const unsubscribe = session.subscribe((state) => {
if (state.status === 'connected') {
console.log('Connected accounts:', state.accounts)
}
})

// Clean up
unsubscribe()

Custom connector implementation.

import { Connector } from '@cinacoin/core-sdk'

class MyWalletConnector extends Connector {
readonly id = 'my-wallet'
readonly name = 'My Wallet'
readonly icon = 'https://mywallet.com/icon.png'
readonly installed = true
readonly type = 'injected'

async connect(params?: ConnectParams): Promise<ConnectionResult> {
// Your wallet connection logic
return {
accounts: ['0x...'],
chainId: 1,
sessionId: 'unique-session-id',
}
}

async disconnect(): Promise<void> {
// Cleanup
}

async getAccounts(): Promise<string[]> {
return ['0x...']
}

async getChainId(): Promise<number> {
return 1
}

async switchChain(chainId: number): Promise<void> {
// Chain switching logic
}

async signMessage(message: string): Promise<string> {
return '0x...'
}

async signTransaction(tx: TransactionRequest): Promise<string> {
return '0x...'
}
}