Skip to content

Latest commit

 

History

History
424 lines (322 loc) · 13.5 KB

File metadata and controls

424 lines (322 loc) · 13.5 KB

Conflux DevKit — Package Catalogue

AI-agent note: when code-generating a new project on top of this framework, start by reading this file in full. It maps every available capability to its package, import path, and typical usage pattern.


Framework layer map

UI Components  ─── @cfxdevkit/react          @cfxdevkit/wallet-connect
Wallet logic   ─── @cfxdevkit/wallet         @cfxdevkit/core/wallet
Services       ─── @cfxdevkit/services
RPC / Contracts─── @cfxdevkit/core            @cfxdevkit/contracts
Domain tools   ─── @cfxdevkit/compiler       @cfxdevkit/protocol
Execution      ─── @cfxdevkit/executor      @cfxdevkit/defi-react
Dev tools      ─── @cfxdevkit/devnode        conflux-devkit (npx)

Quick-start recipes

Recipe 1 — Read-only DApp

import { ClientManager, ContractReader, ERC20_ABI } from '@cfxdevkit/core';

const clients = new ClientManager({ network: 'testnet' });
const reader  = new ContractReader(clients.evm);

const balance = await reader.read({
  address: '0xTokenAddress',
  abi: ERC20_ABI,
  functionName: 'balanceOf',
  args: ['0xUserAddress'],
});

Recipe 2 — Full DApp with wallet connection

import { WagmiProvider, wagmiConfig, WalletConnect } from '@cfxdevkit/wallet-connect';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';

const qc = new QueryClient();
export function Providers({ children }) {
  return (
    <WagmiProvider config={wagmiConfig}>
      <QueryClientProvider client={qc}>{children}</QueryClientProvider>
    </WagmiProvider>
  );
}

// Anywhere in the tree:
// <WalletConnect />

Recipe 3 — Backend / CLI (Node.js, no UI)

import { EmbeddedWalletManager, generateMnemonic } from '@cfxdevkit/wallet';
import { SwapService }   from '@cfxdevkit/services';
import { ClientManager } from '@cfxdevkit/core';

const mnemonic = generateMnemonic();
const wallet   = new EmbeddedWalletManager({ mnemonic, networkType: 'testnet' });
const clients  = new ClientManager({ network: 'testnet' });
const swapper  = new SwapService(clients.evm);

Recipe 4 — Local dev node (automated testing / CI)

import { ServerManager } from '@cfxdevkit/devnode';

const node = new ServerManager();
await node.start();
await node.mine(3);
await node.stop();

Recipe 5 — Local dev node with UI dashboard

npx conflux-devkit           # opens http://localhost:7748
npx conflux-devkit --port 8888 --no-open

Package reference

@cfxdevkit/core

Tier: Foundation — always required. Dir: packages/core

Export Description
ClientManager Creates and holds EVM (viem) + Core Space (cive) RPC clients
ContractReader Type-safe eth_call / cfx_call wrapper
ContractWriter Type-safe eth_sendTransaction wrapper
ContractDeployer Deploy contracts from bytecode + ABI
EmbeddedWalletManager HD wallet with session keys, transaction batching, export
generateMnemonic Generate a random BIP-39 mnemonic (12 or 24 words)
validateMnemonic Validate a BIP-39 mnemonic
deriveAccount Derive a single HD account (Core + eSpace addresses + keys)
deriveAccounts Derive N accounts from a mnemonic
deriveFaucetAccount Derive the mining/faucet account
ERC20_ABI Standard ERC-20 ABI as const
ERC721_ABI Standard ERC-721 ABI as const
ERC1155_ABI Standard ERC-1155 ABI as const
ERC2612_ABI EIP-2612 permit extension ABI
ERC4626_ABI ERC-4626 tokenised vault ABI
EVM_TESTNET, EVM_MAINNET, EVM_LOCAL viem chain configs for Conflux eSpace
CORE_TESTNET, CORE_MAINNET, CORE_LOCAL cive chain configs for Core Space
COIN_TYPES, CORE_NETWORK_IDS BIP-44 derivation constants
import { ClientManager, ContractReader, ERC20_ABI, deriveAccount } from '@cfxdevkit/core';

@cfxdevkit/services

Tier: Layer 1. Dir: packages/services Depends on: @cfxdevkit/core

Export Description
KeystoreService File-backed encrypted HD keystore. Multiple named mnemonics, optional AES-256 password, active-mnemonic switching
getKeystoreService() Singleton accessor for KeystoreService
EncryptionService AES-256-GCM encryption/decryption utilities
SwapService Swappi DEX swap router — getPrice, swap, getTokenInfo
import { getKeystoreService, SwapService } from '@cfxdevkit/services';

const ks = getKeystoreService();
await ks.initialize();
const mnemonic = await ks.getActiveMnemonic();

@cfxdevkit/wallet

Tier: Layer 1 — focused re-export. Dir: packages/wallet Depends on: @cfxdevkit/core

import { EmbeddedWalletManager, generateMnemonic, deriveAccount } from '@cfxdevkit/wallet';

@cfxdevkit/compiler

Tier: Layer 1 — tooling. Dir: packages/compiler Depends on: bundled solc-js

Bundles the Solidity compiler WASM. Compile arbitrary .sol source at runtime — no Hardhat, no external binary.

Template Description
SimpleStorage Value-storage contract for deployment smoke tests
TestToken Minimal ERC-20 with mint/burn for DEX and approval tests
import {
  compileSolidity,
  getSimpleStorageContract,
  getTestTokenContract,
  TEST_CONTRACTS,
} from '@cfxdevkit/compiler';

const result = await compileSolidity(mySource, 'MyContract');
if (result.success) {
  const { abi, bytecode } = result.contracts[0];
}

// Pre-built template (memoised after first call)
const { abi, bytecode } = getSimpleStorageContract();

Conflux note: default EVM version is paris. Do not use shanghai or later — Conflux eSpace does not support PUSH0.


@cfxdevkit/devnode

Tier: Layer 1 — dev / test only. Dir: packages/devnode Depends on: @cfxdevkit/core

import { ServerManager } from '@cfxdevkit/devnode';

const node = new ServerManager();
await node.start();

const status   = node.getNodeStatus();   // { server, mining, rpcUrls }
const accounts = node.getAccounts();     // pre-funded genesis accounts
const urls     = node.getRpcUrls();      // { core, evm, ws }

await node.mine(5);                      // mine 5 blocks
await node.startMining(500);             // auto-mine every 500 ms
await node.stopMining();
await node.stop();

@cfxdevkit/contracts

Tier: Layer 1 — generated artefacts. Dir: packages/contracts Source: devtools/contracts (Hardhat project)

Generated ABI, bytecode, and multi-chain deployed addresses. Includes standard token ABIs and a bootstrap library of deployable templates. Do not edit src/generated.ts or src/bootstrap-abis.ts by hand.

import {
  // DevKit contracts
  automationManagerAbi,
  automationManagerAddress,   // Record<chainId, `0x${string}`>
  automationManagerConfig,    // { abi, address } — usable directly in wagmi hooks
  automationManagerBytecode,
  swappiPriceAdapterAbi,
  swappiPriceAdapterConfig,
  permitHandlerAbi,
  permitHandlerConfig,
  // Standard token ABIs (base + extended)
  erc20Abi, ERC20_ABI, erc20ExtendedAbi,
  erc721Abi, ERC721_ABI, erc721ExtendedAbi,
  erc1155Abi, ERC1155_ABI,
  erc2612Abi, ERC2612_ABI,
  erc4626Abi, ERC4626_ABI,
  // Bootstrap library (deployable)
  erc20BaseAbi, erc20BaseBytecode,
  erc721BaseAbi, erc721BaseBytecode,
  erc1155BaseAbi, erc1155BaseBytecode,
  wrappedCfxAbi, wrappedCfxBytecode,
  stakingRewardsAbi, stakingRewardsBytecode,
  vestingScheduleAbi, vestingScheduleBytecode,
  merkleAirdropAbi, merkleAirdropBytecode,
  multiSigWalletAbi, multiSigWalletBytecode,
  paymentSplitterAbi, paymentSplitterBytecode,
  mockPriceOracleAbi, mockPriceOracleBytecode,
} from '@cfxdevkit/contracts';

Regenerate after a contract change or new deployment:

pnpm --filter @cfxdevkit/contracts-dev codegen   # compile + wagmi generate
pnpm --filter @cfxdevkit/contracts build          # build the lean package

@cfxdevkit/protocol

Tier: Layer 1 — Conflux network artifacts. Dir: packages/protocol No peer dependencies

Conflux precompile contract ABIs + deprecated DevKit ABI re-exports.

import {
  adminControlAbi, adminControlAddress,
  sponsorWhitelistAbi, sponsorWhitelistAddress,
  stakingAbi, stakingAddress,
  crossSpaceCallAbi, crossSpaceCallAddress,
  posRegisterAbi, posRegisterAddress,
  CONFLUX_PRECOMPILE_ADDRESSES,
} from '@cfxdevkit/protocol';

⚠️ DevKit contract ABIs (automationManagerAbi etc.) re-exported here are deprecated. Migrate to @cfxdevkit/contracts.


@cfxdevkit/executor

Tier: Layer 1 — execution engine. Dir: packages/executor Depends on: @cfxdevkit/core, @cfxdevkit/contracts

Export Description
Executor Orchestrator — evaluates jobs, checks prices, submits transactions
KeeperClientImpl viem client wrapping AutomationManager contract
SafetyGuard Circuit-breaker — per-tick swap caps, retry caps, consecutive-failure breaker
RetryQueue Exponential backoff with jitter
PriceChecker Pluggable price source + condition evaluation (gte/lte)
noopLogger Silent AutomationLogger (use as default when no logger needed)
LimitOrderStrategy, DCAStrategy, TWAPStrategy, SwapStrategy Strategy types
LimitOrderJob, DCAJob, TWAPJob, SwapJob Job types (union: Job)
import { Executor, KeeperClientImpl, SafetyGuard, noopLogger } from '@cfxdevkit/executor';

@cfxdevkit/defi-react

Tier: Layer 2 — React / DeFi UI. Dir: packages/defi-react Peer deps: react, viem

import { usePoolTokens, getPairedTokens, ERC20_ABI, WCFX_ABI } from '@cfxdevkit/defi-react';

const { tokens, pairs, isLoading, error } = usePoolTokens({
  poolsApiUrl: '/api/pools',
  chain: confluxESpace,
  address: walletAddress,
});

Tier: Layer 2 — React UI, frontend only. Dir: packages/wallet-connect Peer deps: react, wagmi, viem, connectkit, @tanstack/react-query

import { WalletConnect, AuthProvider, useNetworkSwitch, wagmiConfig, eSpaceMainnet, eSpaceTestnet } from '@cfxdevkit/wallet-connect';

@cfxdevkit/react

Tier: Layer 2 — React UI, frontend only. Dir: packages/react Peer deps: react, wagmi, viem, @tanstack/react-query

Component / Hook Description
<ConnectButton> Wallet connect trigger
<AccountCard> Display connected account info
<ContractReader> Read a contract value and render the result
<ContractWriter> Write to a contract with pending/success/error states
<SwapWidget> Swappi DEX token-swap form

Devtools reference

devtools/contracts — Hardhat project

Package: @cfxdevkit/contracts-dev (private)

pnpm --filter @cfxdevkit/contracts-dev compile    # compile Solidity
pnpm --filter @cfxdevkit/contracts-dev codegen    # compile + wagmi generate
pnpm --filter @cfxdevkit/contracts-dev test       # run contract tests
pnpm --filter @cfxdevkit/contracts-dev deploy     # deploy to testnet

devtools/devkitconflux-devkit

Package: conflux-devkit (published)

The npx conflux-devkit tool. Starts an Express + Socket.IO server that manages a local Conflux node and serves a pre-built Next.js UI.

npx conflux-devkit [--port 7748] [--no-open]

Build from source:

pnpm --filter conflux-devkit-ui build   # build Next.js UI export
pnpm --filter conflux-devkit build      # copy UI + bundle CLI with tsup
node devtools/devkit/dist/cli.js        # run directly

Import path cheat sheet

What you need Import from
RPC client (EVM or Core) @cfxdevkit/coreClientManager
Contract read @cfxdevkit/coreContractReader
Contract write @cfxdevkit/coreContractWriter
Contract deploy @cfxdevkit/coreContractDeployer
HD wallet / key derivation @cfxdevkit/wallet
Keystore (encrypted, file-backed) @cfxdevkit/servicesgetKeystoreService()
DEX swap @cfxdevkit/servicesSwapService
AES encryption @cfxdevkit/servicesEncryptionService
Solidity compile (runtime) @cfxdevkit/compilercompileSolidity
Pre-built contract templates @cfxdevkit/compilerTEST_CONTRACTS
Standard ERC-20/721/1155 ABI @cfxdevkit/contractserc20Abi etc.
EIP-2612 permit ABI @cfxdevkit/contractserc2612Abi
ERC-4626 vault ABI @cfxdevkit/contractserc4626Abi
Bootstrap contract deploy @cfxdevkit/contractserc20BaseAbi + erc20BaseBytecode etc.
Generated DevKit ABI + addresses @cfxdevkit/contractsautomationManagerAbi etc.
Conflux precompile ABI @cfxdevkit/protocoladminControlAbi etc.
Execution engine (keeper/bot) @cfxdevkit/executorExecutor
Wallet connect UI (React) @cfxdevkit/wallet-connectWalletConnect
React components / hooks @cfxdevkit/react
DeFi pool tokens (React) @cfxdevkit/defi-reactusePoolTokens
Local dev node (programmatic) @cfxdevkit/devnodeServerManager
Local dev node (browser UI) npx conflux-devkit

Versioning

All packages follow semver. Breaking changes are not guaranteed to have a major version bump until 1.0.0 is reached. Pin exact versions until the framework stabilises.

Changesets are managed via @changesets/cli. Run pnpm changeset to create a change entry; pnpm changeset version to bump packages.