原始内容
name: circle-chain-js-sdk
description: JavaScript SDK and CLI for Circle Chain (@lidh04/circle-chain-sdk): user auth,
wallet, block, miner, transfers, contacts, HTTP config. Global CLI binary circle. Use when
working in js-circle-chain-sdk, integrating Circle Chain from Node/browser, or
when the user mentions circle-chain SDK, @lidh04/circle-chain-sdk, local mining,
or the circle CLI.
Circle Chain JavaScript SDK
Package and layout
- npm:
@lidh04/circle-chain-sdk— local dependency:npm i @lidh04/circle-chain-sdk - Default export: an object with namespaces
user,wallet,block,node,miner,common— e.g.import sdk from '@lidh04/circle-chain-sdk'thenconst { user, wallet, miner } = sdk. README snippets use bare names likelogin,createWallet; bind them from the matching namespace (user.login,wallet.createWallet, etc.). - Source repo:
src/—circle-user.js,circle-wallet.js,circle-block.js,circle-node.js,circle-miner.js,circle-common.js; CLI undersrc/cli/.
Development workflow
- Build:
npm run build— outputsdist/cjsanddist/mjs(TypeScript + fixup). - Tests: Run
npm run buildbeforenpm testwhen suites need freshdist/. CLI-only:npm run test:cli(builds, then Jest matchesdist/cjs/cli). - CLI from a clone: after build,
npm run cli -- <args>ornode ./dist/mjs/cli/main.js <args>.
CLI (Commander.js)
Published executable name: circle (see package.json "bin" → dist/mjs/cli/main.js).
Install globally
npm install -g @lidh04/circle-chain-sdk
circle --help
Using circle
-d/--dev— usehttp://localhost:8888instead of production (e.g.circle --dev user login-send-code --email you@example.com).- Subcommand groups: user, wallet, block, miner, config. Discover flags with
circle <group> --help.
circle --help
circle user --help
circle user login-send-code --email you@example.com
circle wallet query public-balance --address <addr>
circle block header-list --base-height 0
circle miner mine --address <your-miner-address>
circle config show
circle config set --host your.api.example --timeout-read 8000
circle config (HTTP settings)
User overrides are stored under ~/.ccl/ (or %USERPROFILE%\.ccl\ on Windows) and apply to the Node.js SDK and CLI.
| Command | Purpose |
|---|---|
circle config show |
Print effective HTTP settings (bundled defaults + http.config + Geo hint when applicable). |
circle config set … |
Merge options into ~/.ccl/http.config (JSON). At least one flag required. |
Supported flags for config set:
--host,--protocol(http|https)--timeout-read,--timeout-write(milliseconds, non‑negative integers as strings in config)--retry-count,--retry-wait-time--ssl-support(true|false)
Example:
circle config set --host api.example.com --protocol https
Developing this repo
npm run build
npm run cli -- --help
# or: node ./dist/mjs/cli/main.js --help
CLI tests: src/cli/*.test.js; Jest runs compiled tests under dist/cjs/cli/ per jest.config.cjs.
Programmatic usage patterns
Responses typically include status (e.g. 200), message, and data. On failure, surface response.message.
Auth (register / login)
- Register then password login:
sendRegisterVerifyCode→register→login(email + password). - Login with verify code only:
sendVerifyCode→login(email +verifyCode).
Wallet
createWallet()— on success, address indata.
Local mining
miner.canMineBlock()— return early if false.miner.fetchMyBlockData(address)— fromdata:blockHeaderHexString,channelId.miner.mineBlock(blockHeaderHexString, workerCount)— e.g.os.cpus().length - 1; result lines separated by\n; first line is mined header hex.miner.postMyBlock({ address, channelId, blockHeaderHexString: minedBlockHeader }).- Per README: successful block upload rewards 10 cc (100,000 li) to the miner address.
Pay password
sendPayVerifyCode→setPayPasswordwithaccount: { email },verifyCode,password.
Transfers
sendTo:email,from,address(to),transContent(type,uuid, etc.),payPassword.pay:from,to,value,payPassword.
Contacts
addContacts: e.g.email,name,sex,address(location string in README).
common namespace (HTTP config & GeoIP)
Available via import sdk from '@lidh04/circle-chain-sdk' then sdk.common.*.
Key exports:
| Export | Description |
|---|---|
getGatewayHttp() |
Resolve effective HTTP settings (defaults → Geo hint → user http.config). Returns object with host, protocol, timeoutRead, timeoutWrite, retryCount, retryWaitTime, sslSupport. |
mergeUserHttpConfig(updates) |
Write key/value pairs to ~/.ccl/http.config. |
getUserHttpConfigPath() |
Return path to ~/.ccl/http.config. |
clearGatewayHttpCache() |
Invalidate in-memory cache for config and Geo host hint. |
refreshGatewayHttpGeoCache() |
Force refresh GeoIP lookup (Node only). |
gatewayHttpHostForCountry(countryCode) |
Return API host for a given ISO country code (CN → bundled default; others → GATEWAY_HTTP_HOST_OVERSEAS). |
GATEWAY_HTTP_CONFIG_KEYS |
Array of accepted config keys. |
GATEWAY_HTTP_HOST_OVERSEAS |
Host string for non-mainland regions: www.circlecoin.me. |
GeoIP behavior (Node.js only):
- On first call to
getGatewayHttp()without a valid~/.ccl/http-geo.cache, the SDK fetches your public IP country fromhttps://ipwho.is/. - CN country code → keeps the bundled default host (circle-node.net).
- Any other country → uses
www.circlecoin.me(overseas host). - Result is cached to
~/.ccl/http-geo.cachewith a 7-day TTL. - Setting an explicit
hostinhttp.configdisables Geo-based host selection. - Disable entirely with environment variable
CIRCLE_SKIP_GEO=1.
Versions
1.1.2
- HTTP config: user overrides in
~/.ccl/http.config(JSON);common.getGatewayHttp()merges defaults fromcircle-gateway.js, optional Geo-based host hint, thenhttp.config(explicithostwins and skips Geo for host). - GeoIP (Node):
~/.ccl/http-geo.cachepopulated viahttps://ipwho.is/; mainland CN keeps default API host; other regions usewww.circlecoin.me. Disable withCIRCLE_SKIP_GEO=1. Helpers:refreshGatewayHttpGeoCache(),gatewayHttpHostForCountry(),clearGatewayHttpCache(). - CLI:
circle config show/circle config setfor HTTP settings; buildfixupsets execute bit on CLImain.js. - Tests: shared
expectSdkHttpResultfor live API shape;circle-common-geo.test.js; Jestjest.env.cjsforCIRCLE_SKIP_GEO.
1.1.1
- README: document global CLI install (
npm install -g @lidh04/circle-chain-sdk), usingcirclewith--dev, and developing the repo (npm run cli/node ./dist/mjs/cli/main.js)
1.1.0
- CLI (Commander.js) for user, wallet, miner, block; entry
circle/main.js. - CLI split into
user-command,wallet-command,miner-command,block-command; user CLI email-only. - CLI tests under
src/cli, Jest runsdist/cjs/cli;circle-nodetest import path fix.
1.0.22 — security improvements
1.0.21 — bugfixes
1.0.20 — local block mining
Keep this skill aligned with repo README.md and package.json (bin name, exports).