This document is designed to be consumed by AI coding assistants. It provides a
structured map of the @cfxdevkit monorepo so that an agent can quickly orient
itself without reading every file.
packages/ @cfxdevkit/* published npm packages
devtools/ private tooling (Hardhat, CLI server, Next.js UI)
docs/ documentation
docker/ Dockerfile + docker-compose.yml
scripts/ release.mjs, setup-npm-trust.mjs
biome.json lint/format config (root + per-package overrides)
turbo.json build pipeline
pnpm-workspace.yaml
tsconfig.base.json shared tsconfig (extended per package)
Purpose: Foundation layer. RPC clients, HD wallet, contract utilities, chain configs, automation primitives.
Key exports (from packages/core/src/):
ClientManager— manages viem (eSpace) + cive (Core Space) clientsEVM_MAINNET,EVM_TESTNET,EVM_LOCAL,CORE_MAINNET,CORE_TESTNET,CORE_LOCAL— chain configsContractReader,ContractWriter,ContractDeployer— contract interactiongenerateMnemonic,deriveAccounts,deriveAccount— HD wallet BIP32/BIP39EmbeddedWalletManager,TransactionBatcher,SessionKeyManager— wallet typesERC20_ABI,ERC721_ABI,ERC1155_ABI,ERC2612_ABI,ERC4626_ABI— standard ABIs (re-exported from @cfxdevkit/contracts)erc20Abi,erc721Abi,erc1155Abi,erc2612Abi,erc4626Abi— camelCase aliasesSafetyGuard,RetryQueue,PriceChecker— automation primitives (from/automationsubpath)
Subpath exports: /clients, /config, /types, /utils, /wallet, /contracts, /automation
Source tree: packages/core/src/{clients,config,types,utils,wallet,contracts,automation}/
Purpose: All on-chain artifacts — generated DevKit ABIs, canonical standard token ABIs, bootstrap library (deployable templates).
Key exports (from packages/contracts/src/):
- Generated DevKit contracts (from
src/generated.ts):automationManagerAbi,automationManagerAddress,automationManagerBytecode,automationManagerConfigpermitHandlerAbi,permitHandlerAddress,permitHandlerBytecode,permitHandlerConfigswappiPriceAdapterAbi,swappiPriceAdapterAddress,swappiPriceAdapterBytecode,swappiPriceAdapterConfig- UPPER_CASE aliases:
AUTOMATION_MANAGER_ABI,PERMIT_HANDLER_ABI,SWAPPI_PRICE_ADAPTER_ABI
- Standard ABIs (from
src/standard-abis.ts):erc20Abi/ERC20_ABI,erc20ExtendedAbi/ERC20_EXTENDED_ABIerc721Abi/ERC721_ABI,erc721ExtendedAbi/ERC721_EXTENDED_ABIerc1155Abi/ERC1155_ABIerc2612Abi/ERC2612_ABIerc4626Abi/ERC4626_ABI
- Bootstrap library (from
src/bootstrap-abis.ts):erc20BaseAbi,erc20BaseBytecode— full-featured ERC-20 (cap, burn, pause, permit, RBAC)erc721BaseAbi,erc721BaseBytecode— full-featured ERC-721 NFT (enumerable, URI, royalties)erc1155BaseAbi,erc1155BaseBytecode— full-featured ERC-1155 (per-token caps, royalties)wrappedCfxAbi,wrappedCfxBytecode— WETH9-identical CFX wrapperstakingRewardsAbi,stakingRewardsBytecode— Synthetix-style stakingvestingScheduleAbi,vestingScheduleBytecode— cliff + linear vestingmerkleAirdropAbi,merkleAirdropBytecode— Merkle proof airdropmultiSigWalletAbi,multiSigWalletBytecode— M-of-N multisigpaymentSplitterAbi,paymentSplitterBytecode— proportional revenue splittermockPriceOracleAbi,mockPriceOracleBytecode— Chainlink AggregatorV3 mock
Do not edit: src/generated.ts and src/bootstrap-abis.ts are auto-generated by pnpm --filter @cfxdevkit/contracts-dev codegen.
Purpose: Conflux precompile ABIs + deprecated DevKit ABI re-exports.
Key exports (from packages/protocol/src/precompiles.ts):
adminControlAbi/ADMIN_CONTROL_ABI+adminControlAddress(0x0888…0000)sponsorWhitelistAbi/SPONSOR_WHITELIST_ABI+sponsorWhitelistAddress(0x0888…0001)stakingAbi/STAKING_ABI+stakingAddress(0x0888…0002)crossSpaceCallAbi/CROSS_SPACE_CALL_ABI+crossSpaceCallAddress(0x0888…0006)posRegisterAbi/POS_REGISTER_ABI+posRegisterAddress(0x0888…0005)CONFLUX_PRECOMPILE_ADDRESSES— named map of all addresses
Deprecated re-exports (from src/abi.ts, will be removed in v2):
automationManagerAbi,permitHandlerAbi,swappiPriceAdapterAbi+ their UPPER_CASE/address/bytecode/config variants- Migration: change
from '@cfxdevkit/protocol'→from '@cfxdevkit/contracts'
Purpose: Stateful services built on top of @cfxdevkit/core — encrypted keystore, Swappi DEX, AES-256 encryption.
Key exports:
KeystoreService— file-backed encrypted HD wallet keystore (AES-256-GCM + PBKDF2)setup(opts),addMnemonic(opts),unlockKeystore(pw),lock()getActiveMnemonic(),deriveAccountsFromMnemonic(mnemonic, space, count, offset)
SwapService— Swappi DEX router (Uniswap V2 style)getQuote({tokenIn, tokenOut, amountIn, slippageBps})→ quoteswap({...quote, walletClient, deadline})→ txHashgetTokenInfo(symbol)→ token metadata
EncryptionService— AES-256-GCM + PBKDF2encrypt(data, password),decrypt(encrypted, password)
Purpose: On-chain strategy execution engine for Conflux.
Key exports:
Executor— orchestrates job evaluation, price checks, on-chain executionKeeperClientImpl— viem wrapper forAutomationManagercontractSafetyGuard— circuit-breaker with per-tick swap caps, retry caps, consecutive failure circuit-breakerRetryQueue— exponential backoff with jitterPriceChecker— pluggable price source + condition evaluation (gte/lte)noopLogger— silentAutomationLoggerimplementation- Job types:
LimitOrderJob,DCAJob,TWAPJob,SwapJob(union:Job) - Strategy types:
LimitOrderStrategy,DCAStrategy,TWAPStrategy,SwapStrategy
Import: all from @cfxdevkit/executor (no subpaths)
Purpose: Thin re-export facade over @cfxdevkit/core/wallet. Use when you only need wallet features.
Key exports: TransactionBatcher, SessionKeyManager, EmbeddedWalletManager (same as @cfxdevkit/core/wallet)
Subpaths: @cfxdevkit/wallet/batching, @cfxdevkit/wallet/session-keys, @cfxdevkit/wallet/embedded
Purpose: Runtime Solidity compilation (no Hardhat binary required) + pre-built templates.
Key exports:
compileSolidity(input)→CompilationResultcompileMultipleSources(sources, optimizer?, evmVersion?)→CompilationResultgetSolcVersion()→ stringgetSimpleStorageContract(),getTestTokenContract()— memoised pre-built templatesTEST_CONTRACTS— map of all templates (via@cfxdevkit/compiler/templatessubpath)
Important: always uses EVM version paris (Conflux eSpace doesn't support PUSH0/shanghai).
Purpose: Programmatic wrapper for @xcfx/node local Conflux dev environment.
Key exports:
ServerManager— start/stop node, mine blocks, list accounts, get RPC URLsstart(),stop(),mine(n),startMining(intervalMs),stopMining()getAccounts(),getRpcUrls(),getNodeStatus()
Purpose: DeFi React hooks — Swappi pool token resolution with on-chain balance enrichment.
Key exports:
usePoolTokens({ poolsApiUrl, chain, address })→{ tokens, pairs, isLoading, error }getPairedTokens(pairs, tokenInAddress)→ filtered token listAUTOMATION_MANAGER_ABI,ERC20_ABI,WCFX_ABI,MAX_UINT256— re-exported constants
Purpose: Unstyled headless React components and hooks for Conflux UI.
Key exports:
DevKitProvider— RPC endpoint + wallet context provideruseBalance,useContract,useTransaction— Conflux-aware hooksConnectButton,AccountCard,ContractReader,ContractWriter,SwapWidget— UI components
Purpose: wagmi v2 + ConnectKit + SIWE wallet connection layer, pre-configured for Conflux.
Key exports:
AuthProvider— wraps wagmi + tanstack/react-query + ConnectKit + SIWE sessionWalletConnect— modal-based connect buttonuseAuthContext()→{ address, isAuthenticated, signIn, signOut }useNetworkSwitch()— switch between Conflux networkswagmiConfig— pre-configured Conflux eSpace mainnet + testnet + localconfluxESpace,confluxESpaceTestnet— viem chain objects
Hardhat project. Source contracts are in devtools/contracts/contracts/:
AutomationManager.sol— on-chain keeper registrySwappiPriceAdapter.sol— Swappi DEX price feedPermitHandler.sol— EIP-2712 permit relayinterfaces/— ABI interfacesmocks/— test mocks (MockPriceOracle, etc.)- Bootstrap templates in subdirectory
Hardhat config: devtools/contracts/hardhat.config.ts
Wagmi codegen config: devtools/contracts/wagmi.config.ts
Express + Socket.IO server + CLI.
Source structure:
devtools/devkit/src/
├── cli.ts # CLI entry point (commander)
└── server/
├── index.ts # Express app setup, middleware, route mounting
├── node-manager.ts # @xcfx/node process wrapper
├── ws.ts # WebSocket / Socket.IO setup
├── deploy-helpers.ts # orchestrateDeploy() helper
├── contract-storage.ts # JSON-file contract registry
└── routes/
├── devnode.ts # POST /api/devnode/start|stop; GET /status
├── accounts.ts # GET /api/accounts; POST /fund
├── contracts.ts # compile, deploy, call, write
├── bootstrap.ts # catalog, catalog/:name, deploy
├── mining.ts # mine, start, stop
├── network.ts # GET/PUT /api/network
└── keystore.ts # setup, unlock, lock, status
Next.js 14 static export. Pages in devtools/devkit-ui/src/app/:
(dashboard)/node/— Node tab(dashboard)/accounts/— Accounts tab(dashboard)/contracts/— Contracts tab(dashboard)/bootstrap/— Bootstrap catalog + precompile reference tab(dashboard)/mining/— Mining tab(dashboard)/network/— Network tab(dashboard)/wallet/— Wallet & keystore tab
Built output goes to devtools/devkit/ui/ and is served as static files by the CLI server.
- Add the implementation to
packages/<pkg>/src/ - Re-export from
packages/<pkg>/src/index.ts - If adding a subpath, update
packages/<pkg>/package.json"exports"andtsup.config.ts
- Write the Solidity in
devtools/contracts/contracts/ - Add it to
devtools/contracts/wagmi.config.ts - Run
pnpm --filter @cfxdevkit/contracts-dev codegen - The new ABI/bytecode will appear in
packages/contracts/src/bootstrap-abis.ts - Import it in
devtools/devkit/src/server/routes/bootstrap.tsand add a catalog entry
pnpm --filter @cfxdevkit/<pkg> test
pnpm --filter @cfxdevkit/<pkg> test:coveragepnpm type-check
# or single package:
pnpm --filter @cfxdevkit/<pkg> type-check| What you need | Import from |
|---|---|
| EVM RPC client | @cfxdevkit/core → ClientManager (.evm) |
| Core Space RPC client | @cfxdevkit/core → ClientManager (.core) |
| Contract read | @cfxdevkit/core → ContractReader |
| Contract write | @cfxdevkit/core → ContractWriter |
| Contract deploy | @cfxdevkit/core → ContractDeployer |
| HD wallet key derivation | @cfxdevkit/core or @cfxdevkit/wallet |
| Encrypted keystore | @cfxdevkit/services → KeystoreService |
| Swappi DEX swap | @cfxdevkit/services → SwapService |
| AES-256 encryption | @cfxdevkit/services → EncryptionService |
| Standard ERC-20/721/1155 ABI | @cfxdevkit/contracts → erc20Abi etc. |
| EIP-2612 permit ABI | @cfxdevkit/contracts → erc2612Abi |
| ERC-4626 vault ABI | @cfxdevkit/contracts → erc4626Abi |
| DevKit contract ABI | @cfxdevkit/contracts → automationManagerAbi etc. |
| Bootstrap contract ABI/bytecode | @cfxdevkit/contracts → erc20BaseAbi etc. |
| Conflux precompile ABI | @cfxdevkit/protocol → adminControlAbi etc. |
| Solidity compile (runtime) | @cfxdevkit/compiler → compileSolidity |
| Pre-built contract templates | @cfxdevkit/compiler → TEST_CONTRACTS |
| Execution engine (keeper) | @cfxdevkit/executor → Executor |
| Local dev node (programmatic) | @cfxdevkit/devnode → ServerManager |
| Local dev node (browser UI) | npx conflux-devkit |
| React wallet connect button | @cfxdevkit/wallet-connect → WalletConnect |
| React auth context | @cfxdevkit/wallet-connect → useAuthContext |
| wagmi config | @cfxdevkit/wallet-connect → wagmiConfig |
| DeFi React hooks | @cfxdevkit/defi-react → usePoolTokens |
| Headless React components | @cfxdevkit/react → DevKitProvider etc. |