{"id":22994280,"url":"https://github.com/jccdex/jcc_wallet","last_synced_at":"2026-03-10T23:37:14.504Z","repository":{"id":38238371,"uuid":"145784738","full_name":"JCCDex/jcc_wallet","owner":"JCCDex","description":"Toolkit of wallet to manage multiple chains \u0026 support multiple keystores for each chain","archived":false,"fork":false,"pushed_at":"2024-10-31T02:30:54.000Z","size":3873,"stargazers_count":6,"open_issues_count":0,"forks_count":8,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-11-16T03:32:12.536Z","etag":null,"topics":["bizain-chain","blockchain","call-chain","dex","ethereum","jccdex","jingtum","keystore","moac","stream-chain","swtc-chain","wallet"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JCCDex.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-08-23T01:44:52.000Z","updated_at":"2024-10-31T02:30:55.000Z","dependencies_parsed_at":"2024-01-11T06:48:16.497Z","dependency_job_id":"42e5d268-d9a5-4687-8b12-c9e945f070cf","html_url":"https://github.com/JCCDex/jcc_wallet","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JCCDex%2Fjcc_wallet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JCCDex%2Fjcc_wallet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JCCDex%2Fjcc_wallet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JCCDex%2Fjcc_wallet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JCCDex","download_url":"https://codeload.github.com/JCCDex/jcc_wallet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229783703,"owners_count":18123536,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bizain-chain","blockchain","call-chain","dex","ethereum","jccdex","jingtum","keystore","moac","stream-chain","swtc-chain","wallet"],"created_at":"2024-12-15T05:17:42.141Z","updated_at":"2026-03-10T23:37:14.469Z","avatar_url":"https://github.com/JCCDex.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable MD024 --\u003e\n\n# jcc_wallet\n\n![npm](https://img.shields.io/npm/v/jcc_wallet.svg)\n[![build](https://github.com/JCCDex/jcc_wallet/actions/workflows/node.js.yml/badge.svg)](https://github.com/JCCDex/jcc_wallet/actions/workflows/node.js.yml)\n[![Coverage Status](https://coveralls.io/repos/github/JCCDex/jcc_wallet/badge.svg?branch=master)](https://coveralls.io/github/JCCDex/jcc_wallet?branch=master)\n[![npm downloads](https://img.shields.io/npm/dm/jcc_wallet.svg)](http://npm-stat.com/charts.html?package=jcc_wallet)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)\n\n## Preface\n\n[jcc_wallet](https://github.com/JCCDex/jcc_wallet) is a wallet toolkit of JCCDex. At present, it can handle the creation and verification of [jingtum](http://swtc.top/index.html), [moac](https://www.moac.io/), [ethereum](https://ethereum.org/), [stm](https://labs.stream/en/), [call](http://www.callchain.live/) \u0026 [bizain](https://bizain.net/) wallet, import and export wallet with keystore file, and set password for wallet.\n\n[jcc_wallet](https://github.com/JCCDex/jcc_wallet)是井畅交换平台的钱包处理工具，目前可以处理[jingtum](http://swtc.top/index.html), [moac](https://www.moac.io/), [ethereum](https://ethereum.org/), [stm](https://labs.stream/en/), [call](http://www.callchain.live/)以及[bizain](https://bizain.net/)钱包的创建和校验，以 keystore 形式导入和导出钱包，设置钱包交易密码。\n\n**_[jcc_wallet](https://github.com/JCCDex/jcc_walle) Support running in browsers_**\n\n井畅应用交流群: 557524730\n\nJCCDex Tech support QQ group ID: 557524730\n\n## Installtion\n\n```shell\nnpm install jcc_wallet\n```\n\n## CDN\n\n`jcc_wallet` as a global variable.\n\n```javascript\n\u003cscript src=\"https://unpkg.com/jcc_wallet/dist/jcc-wallet.min.js\"\u003e\u003c/script\u003e\n```\n\n## Table of Contents\n\n- [JingchangWallet](#api-of-jingchangwallet)\n\n- [hdWallet](https://github.com/JCCDex/jcc_wallet/blob/master/docs/hd.md)\n\n- [jtWallet](https://github.com/JCCDex/jcc_wallet/blob/master/docs/jingtum.md)\n\n- [callWallet](https://github.com/JCCDex/jcc_wallet/blob/master/docs/call.md)\n\n- [stmWallet](https://github.com/JCCDex/jcc_wallet/blob/master/docs/stream.md)\n\n- [ethWallet](https://github.com/JCCDex/jcc_wallet/blob/master/docs/ethereum.md)\n\n- [moacWallet](https://github.com/JCCDex/jcc_wallet/blob/master/docs/moac.md)\n\n- [rippleWallet](https://github.com/JCCDex/jcc_wallet/blob/master/docs/ripple.md)\n\n## Structure of Jingchang Wallet\n\nFor more see [IJingchangWalletModel](https://github.com/JCCDex/jcc_wallet/blob/master/src/model/index.ts#L27).\n\n## API of JingchangWallet\n\nSupport multiple wallet keystore for each type.\n\n### Usage\n\n```javascript\nconst JingchangWallet = require(\"jcc_wallet\").JingchangWallet;\n// import { JingchangWallet } from 'jcc_wallet'\n```\n\n### constructor\n\n```javascript\n/**\n * Creates an instance of JingchangWallet.\n * @param {IJingchangWalletModel} wallet\n * @param {boolean} [multiple=false] if the value is true, support save multiple wallet keystore\n * for each type, otherwise only support one.\n * @param {boolean} [samePassword=true] if the value is true, use the default swt keystore's password\n * which be generated in the beginning as password for other type.\n * @memberof JingchangWallet\n */\n```\n\n### generate\n\n```javascript\n/**\n * create a jingchang wallet\n *\n * @static\n * @param {string} password password for keystore\n * @param {string} [secret] swtc chain's secret\n * @returns {Promise\u003cIJingchangWalletModel\u003e} resolve jingchang wallet if success.\n * @memberof JingchangWallet\n */\n```\n\n### isValid\n\n```javascript\n/**\n * check jingchang wallet is valid or not\n *\n * @static\n * @param {*} wallet\n * @returns {boolean} return true if valid.\n * @memberof JingchangWallet\n */\n```\n\n### get\n\n```javascript\n/**\n * get jingchang wallet from local storage\n *\n * @static\n * @returns {(IJingchangWalletModel | null)} return jingchang wallet or null.\n * @memberof JingchangWallet\n */\n```\n\n### clear\n\n```javascript\n/**\n * clear jingchang wallet from local storage.\n *\n * @static\n * @memberof JingchangWallet\n */\n```\n\n### save\n\n```javascript\n/**\n * save jingchang wallet to local storage.\n *\n * @static\n * @param {IJingchangWalletModel} wallet\n * @memberof JingchangWallet\n */\n```\n\n### deriveKeyPair\n\n```javascript\n/**\n * derive key pair with secret\n *\n * @static\n * @param {string} secret\n * @param {string} [chain=\"swt\"]\n * @returns {IKeyPair} for privateKey, it's length should be 64 when call `decryptWithPrivateKey`, but the origin derived\n * privateKey's length is 66 that contains prefix `00` for `secp256k1` or `ED` for `ed25519`, so removed it.\n * @memberof JingchangWallet\n */\n```\n\n### encryptWithPublicKey\n\n```javascript\n/**\n * encrypt data with public key\n *\n * @static\n * @param {string} message\n * @param {string} publicKey\n * @returns {Promise\u003cIEncrypt\u003e}\n * @memberof JingchangWallet\n */\n```\n\n### decryptWithPrivateKey\n\n```javascript\n/**\n * decrypt data with private key\n *\n * @static\n * @param {IEncrypt} message\n * @param {string} privateKey the privateKey's length should be 64\n * @returns {Promise\u003cstring\u003e}\n * @memberof JingchangWallet\n */\n```\n\n### getWallets\n\n```javascript\n/**\n * get wallets from jingchang wallet.\n *\n * @static\n * @param {IJingchangWalletModel} jcWallet\n * @returns {Array\u003cIKeystoreModel\u003e} return wallets if valid, otherwise return empty array.\n * @memberof JingchangWallet\n */\n```\n\n### setJingchangWallet\n\n```javascript\n/**\n * set property of _jingchangWallet\n *\n * @param {IJingchangWalletModel} wallet\n * @memberof JingchangWallet\n */\n```\n\n### getAddress\n\n```javascript\n/**\n * get default wallet's keystore address for each type\n *\n * @param {string} [type=\"swt\"]\n * @returns {Promise\u003cstring\u003e} resolve address if success\n * @memberof JingchangWallet\n */\n```\n\n### getWalletWithType\n\n```javascript\n/**\n * get default wallet keystore with type\n *\n * @param {string} [type=\"swt\"]\n * @returns {Promise\u003cIKeystoreModel\u003e} resolve default wallet keystore if success.\n * @memberof JingchangWallet\n */\n```\n\n### getWalletWithAddress\n\n```javascript\n/**\n * get wallet keystore with address\n *\n * @param {string} address\n * @returns {Promise\u003cIKeystoreModel\u003e} resolve wallet keystore if success.\n * @memberof JingchangWallet\n */\n```\n\n### hasDefault\n\n```javascript\n/**\n * check if has default wallet for each type\n *\n * @param {string} [type=\"swt\"]\n * @returns {boolean} return true if has default.\n * @memberof JingchangWallet\n */\n```\n\n### getSecretWithType\n\n```javascript\n/**\n * get the default wallet keystore's secret with type.\n *\n * @param {string} password\n * @param {string} [type=\"swt\"]\n * @returns {Promise\u003cstring\u003e} resolve secret if success.\n * @memberof JingchangWallet\n */\n```\n\n### getSecretWithAddress\n\n```javascript\n/**\n * get the wallet keystore's secret with address.\n *\n * @param {string} password\n * @param {string} address\n * @returns {Promise\u003cstring\u003e} resolve secret if success.\n * @memberof JingchangWallet\n */\n```\n\n### changeWholePassword\n\n```javascript\n/**\n * change the whole jingchang wallet password, if you set property of _samePassword is false,\n * will throw an error\n *\n * @param {string} oldPassword\n * @param {string} newPassword\n * @returns {Promise\u003cIJingchangWalletModel\u003e} resolve new jingchang wallet if success\n * @memberof JingchangWallet\n */\n```\n\n### changePasswordWithAddress\n\n```javascript\n/**\n * change the keystore password with address, if you set the property of _samePassword is true,\n * will throw an error\n *\n * @param {string} address\n * @param {string} oldPassword\n * @param {string} newPassword\n * @returns {Promise\u003cIJingchangWalletModel\u003e} resolve new jingchang wallet if success\n * @memberof JingchangWallet\n */\n```\n\n### removeWalletWithType\n\n```javascript\n/**\n * remove default wallet keystore of the given type\n * @param {string} [type=\"swt\"]\n * @returns {Promise\u003cIJingchangWalletModel\u003e} resolve new jingchang wallet if success\n * @memberof JingchangWallet\n */\n```\n\n### removeWalletWithAddress\n\n```javascript\n/**\n * remove wallet keystore of the given address\n *\n * @param {string} address\n * @returns {Promise\u003cIJingchangWalletModel\u003e} resolve new jingchang wallet if success\n * @memberof JingchangWallet\n */\n```\n\n### setDefaultWallet\n\n```javascript\n/**\n * set defalut wallet keystore for each type\n *\n * @param {string} address\n * @returns {Promise\u003cIJingchangWalletModel\u003e} resolve new jingchang wallet if success\n * @memberof JingchangWallet\n */\n```\n\n### importSecret\n\n```javascript\n/**\n * import secret\n *\n * @param {string} secret\n * @param {string} password\n * @param {string} type\n * @param {(secret: string) =\u003e string} retriveSecret\n * @returns {Promise\u003cIJingchangWalletModel\u003e} resolve new jingchang wallet if success\n * @memberof JingchangWallet\n */\n```\n\n### findWallet\n\n```javascript\n/**\n * find wallet keystore according to filter function\n *\n * @protected\n * @param {(wallet: IKeystoreModel) =\u003e boolean} filter\n * @returns {IKeystoreModel} return wallet keystore if existent, otherwise throw `keystore is invalid`\n * if the jingchang wallet is invalid or throw `wallet is empty` if the wallet isn't existent\n * @memberof JingchangWallet\n */\n```\n\n### getEncryptData\n\n```javascript\n/**\n * encrypt data\n *\n * @protected\n * @param {string} password\n * @param {IKeypairsModel} keypairs\n * @returns {IKeystoreModel}\n * @memberof JingchangWallet\n */\n```\n\n### saveWallet\n\n```javascript\n/**\n * save wallet keystore to jingchang wallet\n *\n * @private\n * @param {string} password\n * @param {IKeypairsModel} keypairs\n * @returns {Promise\u003cIJingchangWalletModel\u003e} resolve new jingchang wallet if success\n * @memberof JingchangWallet\n */\n```\n\n## HD Wallet\n\njcc wallet support BIP32/39/44 standard.\n\nmore detail see [test/hd.spec.js](https://github.com/JCCDex/jcc_wallet/blob/master/test/hd.spec.js) test case.\n\n```javascript\n// normally hd maniuplate\nIHDWallet hd = HDWallet.generate({ language: \"chinese_simplified\" });\n\n// derive bsc wallet\nhd.deriveWallet({ chain: BIP44Chain.BSC, account: 0, index: 0 })\nhd.getAddress();\n\n// don't worry about address/secret format, hd object have chain type attribute, check it by native chain sdk\nhd.validAddress(\"your address, like jxxxxx or 0x1234\");\nhd.validSecret(\"your secret\");\n\n// default encode utf-8\nhd.hash(\"message text\");\n\n// sign by hd private key automatically\nhd.sign(\"message text\");\n\n// verify message signature is sign address signed or not\nhd.verify(\"message text\", signature, signAddress);\n// or if you don't passby address, you can passby keypair\nhd.verify(\"message test\", signature, null, keypair)\n\n```\n\n## Deprecated API\n\n**_Deprecated api will be removed after 2020.1.1, please update asap._**\n\nFor more see [deprecatedAPI](https://github.com/JCCDex/jcc_wallet/blob/master/deprecatedAPI.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjccdex%2Fjcc_wallet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjccdex%2Fjcc_wallet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjccdex%2Fjcc_wallet/lists"}