{"_id":"@biut-block/biutjs-database","_rev":"1-7b0ddd8a87a03a44243f36c0f0945b8d","name":"@biut-block/biutjs-database","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.3":{"name":"@biut-block/biutjs-database","version":"1.0.3","description":"sec blockchain database middleware","main":"src/index.js","scripts":{"test":"mocha test/test.js"},"repository":{"type":"git","url":"git+https://github.com/SEC-Block/secjs-database.git"},"keywords":["sec","blockchain","database","sqlite"],"author":{"name":"yuan.li"},"license":"ISC","bugs":{"url":"https://github.com/SEC-Block/secjs-database/issues"},"homepage":"https://github.com/SEC-Block/secjs-database#readme","dependencies":{"big.js":"^5.2.2","chai":"^4.2.0","merkle-patricia-tree":"^3.0.0","mkdirp":"^0.5.1","path":"^0.12.7","sqlite3":"^4.0.6"},"gitHead":"be242fae733a99396b1fcd9b0c19944931088608","_id":"@biut-block/biutjs-database@1.0.3","_nodeVersion":"10.13.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nIwpu1pm7mi89PYeekxVg11svnnRqJ5IWNSWrFBsIOMsYBBr3n6dodmG3gGQAl57y507t+grdJCGCg/NebmdpA==","shasum":"203d5bcb13cf6f8c1daf4d8c292420bc57fd7494","tarball":"https://registry.npmjs.org/@biut-block/biutjs-database/-/biutjs-database-1.0.3.tgz","fileCount":28,"unpackedSize":139052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc6qUDCRA9TVsSAnZWagAAvZ0P/0aW/3t5OyyjLflK+hxo\nUEaugl7pT5rZEGOlOQMwkQpiEPrqSh3msN9Wyi/OWEA6DS2NHBA5fTarMcQP\nnwx1bKRu09zIvCyZNJYE1tUJqd5GhvzEsOVSHOxnKnzCyS/MDDBiLTpCu13v\n+aJA+UiT/p8/qnMamERep8t6dc0yo7EZrCz6HsCR4HUuRAWs/hkkHq+EQqbT\nbUs33YpSBJh7jAT8P5c7e5nxCcn8RALRYbRbvHKGdmFl4FvK4Wzul4fRPdqw\ngn+jYtxHDc0OxbD6BGIi37JCQpF+RunMyzztHcWbuCkwUKu+YsqaICtefExN\nA5MdgUJnuZjh85Gwm11dcMK9PAEdovEhqKkjOiv66I0EflcOOjRubLs4sMWk\nQtNgWX4hmLgtw1IAUo6IoZAZb9PiazHUrK3JxGu6yV2kwtzO8LURdC087rN7\nK6L2SyF1SPSqNYpPjPQQIveLstmxlFw3wXnwOUsldu9ZU/sfW4zaQez72j2P\nlxynj01DY2u82WXG6RVa39YugJhqXwvxi5r3O9tfp0XLGpYelIvt6nfqmu7D\nTSXpmk84Lau0c6P1TMPFlc4VbmyI2MyK2/8Wgmw65BYCIM/6IcPfE0BTbF65\nwMfJFUAoCXR01gbg5ihJoufALy9QfTN6zoS+9usouDF9PElda+f2rOlgp/P4\nBqnb\r\n=qhje\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoaUtUC/2lB+qSO49pOzelAVVX69tb58nBSek3XeMwvQIhAOXqtFea6VZI+OXglyWqZLERfVAFbKajx71cTTT8iMk4"}]},"maintainers":[{"name":"zuweihan1992","email":"zuweihan1992@gmail.com"},{"name":"tornadoming","email":"ming1992liu@gmail.com"},{"name":"g277321","email":"g277321@gmail.com"},{"name":"feiminhao","email":"fei.minhao1990@gmail.com"},{"name":"abysmli","email":"abysmli@gmail.com"}],"_npmUser":{"name":"g277321","email":"g277321@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/biutjs-database_1.0.3_1558881538962_0.28184146397475485"},"_hasShrinkwrap":false}},"time":{"created":"2019-05-26T14:38:58.765Z","1.0.3":"2019-05-26T14:38:59.164Z","modified":"2022-04-04T19:14:51.505Z"},"maintainers":[{"name":"zuweihan1992","email":"zuweihan1992@gmail.com"},{"name":"tornadoming","email":"ming1992liu@gmail.com"},{"name":"g277321","email":"g277321@gmail.com"},{"name":"feiminhao","email":"fei.minhao1990@gmail.com"},{"name":"abysmli","email":"abysmli@gmail.com"}],"description":"sec blockchain database middleware","homepage":"https://github.com/SEC-Block/secjs-database#readme","keywords":["sec","blockchain","database","sqlite"],"repository":{"type":"git","url":"git+https://github.com/SEC-Block/secjs-database.git"},"author":{"name":"yuan.li"},"bugs":{"url":"https://github.com/SEC-Block/secjs-database/issues"},"license":"ISC","readme":"<a name=\"SECDataBase\"></a>\r\n\r\n[![JavaScript Style Guide](https://cdn.rawgit.com/standard/standard/master/badge.svg)](https://github.com/standard/standard) \r\n\r\n![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)\r\n\r\n## SECDataBase\r\n\r\nThis package uses leveldb to store and handle data from SEC blockchain, this repository includes operations to four databases:\r\n- Token Block Chain Database\r\n- Token Tx Database\r\n- Transaction Block Chain Database\r\n- Transaction Tx Database\r\n- Account Database\r\n- Product Database\r\n\r\nThe databases contain following methods:\r\n<a name=\"TokenBlockChainDB\"></a>\r\n\r\n## TokenBlockChainDB\r\n**Kind**: global class  \r\n\r\n* [TokenBlockChainDB](#TokenBlockChainDB)\r\n    * [new TokenBlockChainDB(config)](#new_TokenBlockChainDB_new)\r\n    * [.writeTokenBlockToDB(tokenData, callback)](#TokenBlockChainDB+writeTokenBlockToDB) ⇒ <code>None</code>\r\n    * [.isTokenBlockChainDBEmpty(callback)](#TokenBlockChainDB+isTokenBlockChainDBEmpty) ⇒ <code>None</code>\r\n    * [.getTokenBlockChainDB(callback)](#TokenBlockChainDB+getTokenBlockChainDB) ⇒ <code>None</code>\r\n    * [.getTokenBlockFromDB(blockHashArray, callback)](#TokenBlockChainDB+getTokenBlockFromDB) ⇒ <code>None</code>\r\n    * [.getTokenChain(minBlockNumber, maxBlockNumber, callback)](#TokenBlockChainDB+getTokenChain) ⇒ <code>None</code>\r\n    * [.delBlocksFromHeight(blockHeight, callback)](#TokenBlockChainDB+delBlocksFromHeight) ⇒ <code>None</code>\r\n    * [.addUpdateBlock(pos, blockArray, callback)](#TokenBlockChainDB+addUpdateBlock) ⇒ <code>None</code>\r\n    * [.findTxForUser(userAddress, callback)](#TokenBlockChainDB+findTxForUser) ⇒ <code>None</code>\r\n    * [.findTx(userAddress, callback)](#TokenBlockChainDB+findTx) ⇒ <code>None</code>\r\n\r\n<a name=\"TxBlockChainDB\"></a>\r\n\r\n## TxBlockChainDB\r\n**Kind**: global class  \r\n\r\n* [TxBlockChainDB](#TxBlockChainDB)\r\n    * [new TxBlockChainDB(config)](#new_TxBlockChainDB_new)\r\n    * [.writeTxBlockToDB(txData, callback)](#TxBlockChainDB+writeTxBlockToDB) ⇒ <code>None</code>\r\n    * [.isTxBlockChainDBEmpty(callback)](#TxBlockChainDB+isTxBlockChainDBEmpty) ⇒ <code>None</code>\r\n    * [.getTxBlockChainDB(callback)](#TxBlockChainDB+getTxBlockChainDB) ⇒ <code>None</code>\r\n    * [.getTxBlockFromDB(blockHashArray, callback)](#TxBlockChainDB+getTxBlockFromDB) ⇒ <code>None</code>\r\n    * [.getTxChain(minBlockNumber, maxBlockNumber, callback)](#TxBlockChainDB+getTxChain) ⇒ <code>None</code>\r\n    * [.delBlocksFromHeight(blockHeight, callback)](#TxBlockChainDB+delBlocksFromHeight) ⇒ <code>None</code>\r\n    * [.addUpdateBlock(pos, blockArray, callback)](#TokenBlockChainDB+addUpdateBlock) ⇒ <code>None</code>\r\n    * [.findTxForUser(userAddress, callback)](#TokenBlockChainDB+findTxForUser) ⇒ <code>None</code>\r\n\r\n<a name=\"AccountDB\"></a>\r\n\r\n## AccountDB\r\n**Kind**: global class  \r\n\r\n* [AccountDB](#AccountDB)\r\n    * [new AccountDB(config)](#new_AccountDB_new)\r\n    * [.writeUserInfoToAccountDB(accDataList, callback)](#AccountDB+writeUserInfoToAccountDB) ⇒ <code>None</code>\r\n    * [.readUserInfofromAccountDB(accNameList)](#AccountDB+readUserInfofromAccountDB) ⇒ <code>Promise Object</code>\r\n    * [.isAccountDBEmpty(callback)](#AccountDB+isAccountDBEmpty) ⇒ <code>None</code>\r\n    * [.getAccountDB(callback)](#AccountDB+getAccountDB) ⇒ <code>None</code>\r\n    * [.isAccountInAccountDB(accName, callback)](#AccountDB+isAccountInAccountDB) ⇒ <code>None</code>\r\n\r\n<a name=\"ProductDB\"></a>\r\n\r\n## ProductDB\r\n**Kind**: global class  \r\n\r\n* [ProductDB](#ProductDB)\r\n    * [new ProductDB(config)](#new_ProductDB_new)\r\n    * [.writeTxBlockToDB(txData, callback)](#ProductDB+writeTxBlockToDB) ⇒ <code>None</code>\r\n    * [.isProductDBEmpty(callback)](#ProductDB+isProductDBEmpty) ⇒ <code>None</code>\r\n    * [.getProductDB(callback)](#ProductDB+getProductDB) ⇒ <code>None</code>\r\n\r\n<br>\r\n\r\n## TokenBlockChainDB Methods\r\n\r\n<a name=\"new_TokenBlockChainDB_new\"></a>\r\n\r\n### new TokenBlockChainDB(config)\r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| config | <code>Object</code> | contains the relative path for storing database |\r\n\r\n<a name=\"TokenBlockChainDB+writeTokenBlockToDB\"></a>\r\n\r\n### tokenBlockChainDB.writeTokenBlockToDB(tokenData, callback) ⇒ <code>None</code>\r\nWrite single token block or full token chain data to database\r\n\r\n**Kind**: instance method of [<code>TokenBlockChainDB</code>](#TokenBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| tokenData | <code>Array, Object</code> | single token block data or full token block chain data |\r\n| callback | <code>function</code> | callback function, returns error if exist |\r\n\r\n<a name=\"TokenBlockChainDB+isTokenBlockChainDBEmpty\"></a>\r\n\r\n### tokenBlockChainDB.isTokenBlockChainDBEmpty(callback) ⇒ <code>None</code>\r\nCheck whether the token block chain database is empty\r\n\r\n**Kind**: instance method of [<code>TokenBlockChainDB</code>](#TokenBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| callback | <code>function</code> | callback function, callback arguments (err, emptyFlag) |\r\n\r\n<a name=\"TokenBlockChainDB+getTokenBlockChainDB\"></a>\r\n\r\n### tokenBlockChainDB.getTokenBlockChainDB(callback) ⇒ <code>None</code>\r\nGet all the block datas from token block chain database\r\n\r\n**Kind**: instance method of [<code>TokenBlockChainDB</code>](#TokenBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| callback | <code>function</code> | callback function, callback arguments (err, block object array) |\r\n\r\n<a name=\"TokenBlockChainDB+getTokenBlockFromDB\"></a>\r\n\r\n### tokenBlockChainDB.getTokenBlockFromDB(blockHashArray, callback) ⇒ <code>None</code>\r\nGet token blocks according to block hash values\r\n\r\n**Kind**: instance method of [<code>TokenBlockChainDB</code>](#TokenBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| blockHashArray | <code>String, Array</code> | block hash values, string or array format |\r\n| callback | <code>function</code> | callback function, callback arguments (err, block object array) |\r\n\r\n<a name=\"TokenBlockChainDB+getTokenChain\"></a>\r\n\r\n### tokenBlockChainDB.getTokenChain(minBlockNumber, maxBlockNumber, callback) ⇒ <code>None</code>\r\nGet token block chain data, from number 'minBlockNumber' to number 'maxBlockNumber'\r\n\r\n**Kind**: instance method of [<code>TokenBlockChainDB</code>](#TokenBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| minBlockNumber | <code>Integer</code> | minimum block number |\r\n| maxBlockNumber | <code>Integer</code> | maximum block number |\r\n| callback | <code>function</code> | callback function, callback arguments (err, block object array) |\r\n\r\n<a name=\"TokenBlockChainDB+delBlocksFromHeight\"></a>\r\n\r\n### tokenBlockChainDB.delBlocksFromHeight(blockHeight, callback) ⇒ <code>None</code>\r\nDelete blocks which have a higher height than the input 'blockHeight' argument\r\n\r\n**Kind**: instance method of [<code>TokenBlockChainDB</code>](#TokenBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| blockHeight | <code>Integer</code> | blocks with larger height will be deleted from database |\r\n| callback | <code>function</code> | callback function, callback arguments (err) |\r\n\r\n<a name=\"TokenBlockChainDB+addUpdateBlock\"></a>\r\n\r\n### tokenBlockChainDB.addUpdateBlock(pos, blockArray, callback) ⇒ <code>None</code>\r\nAdd new blocks from a specific position if the blocks does not exist<br>\r\nUpdate old blocks from a specific position if the blocks already exist\r\n\r\n**Kind**: instance method of [<code>TokenBlockChainDB</code>](#TokenBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| pos | <code>Integer</code> | block add/update starting position |\r\n| blockArray | <code>Array</code> | array of block data(json object) |\r\n| callback | <code>function</code> | callback function, callback arguments (err) |\r\n\r\n<a name=\"TokenBlockChainDB+findTxForUser\"></a>\r\n\r\n### tokenBlockChainDB.findTxForUser(userAddress, callback) ⇒ <code>None</code>\r\nFind all previous transactions for a user\r\n\r\n**Kind**: instance method of [<code>TokenBlockChainDB</code>](#TokenBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| userAddress | <code>String</code> | user account address |\r\n| callback | <code>function</code> | callback function, callback arguments (txArray, err) |\r\n\r\n### tokenBlockChainDB.findTx(txHash, callback) ⇒ <code>None</code>\r\nFind a previous transactions for a user by transaction hash\r\n\r\n**Kind**: instance method of [<code>TokenBlockChainDB</code>](#TokenBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| txHash | <code>String</code> | transaction hash |\r\n| callback | <code>function</code> | callback function, callback arguments (txArray, err) |\r\n\r\n<br><br>\r\n\r\n## TxBlockChainDB Methods\r\n\r\n<a name=\"new_TxBlockChainDB_new\"></a>\r\n\r\n### new TxBlockChainDB(config)\r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| config | <code>Object</code> | contains the relative path for storing database |\r\n\r\n<a name=\"TxBlockChainDB+writeTxBlockToDB\"></a>\r\n\r\n### txBlockChainDB.writeTxBlockToDB(txData, callback) ⇒ <code>None</code>\r\nWrite single tx block or full transaction chain data to database\r\n\r\n**Kind**: instance method of [<code>TxBlockChainDB</code>](#TxBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| txData | <code>Array, Object</code> | single tx block data or full transaction block chain data |\r\n| callback | <code>function</code> | callback function, returns error if exist |\r\n\r\n<a name=\"TxBlockChainDB+isTxBlockChainDBEmpty\"></a>\r\n\r\n### txBlockChainDB.isTxBlockChainDBEmpty(callback) ⇒ <code>None</code>\r\nCheck whether the transaction block chain database is empty\r\n\r\n**Kind**: instance method of [<code>TxBlockChainDB</code>](#TxBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| callback | <code>function</code> | callback function, callback arguments (err, emptyFlag) |\r\n\r\n<a name=\"TxBlockChainDB+getTxBlockChainDB\"></a>\r\n\r\n### txBlockChainDB.getTxBlockChainDB(callback) ⇒ <code>None</code>\r\nGet all the block datas from transaction block chain database\r\n\r\n**Kind**: instance method of [<code>TxBlockChainDB</code>](#TxBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| callback | <code>function</code> | callback function, callback arguments (err, block object array) |\r\n\r\n<a name=\"TxBlockChainDB+getTxBlockFromDB\"></a>\r\n\r\n### txBlockChainDB.getTxBlockFromDB(blockHashArray, callback) ⇒ <code>None</code>\r\nGet transaction blocks according to block hash values\r\n\r\n**Kind**: instance method of [<code>TxBlockChainDB</code>](#TxBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| blockHashArray | <code>String, Array</code> | block hash values, string or array format |\r\n| callback | <code>function</code> | callback function, callback arguments (err, block object array) |\r\n\r\n<a name=\"TxBlockChainDB+getTxChain\"></a>\r\n\r\n### txBlockChainDB.getTxChain(minBlockNumber, maxBlockNumber, callback) ⇒ <code>None</code>\r\nGet transaction block chain data, from number 'minBlockNumber' to number 'maxBlockNumber'\r\n\r\n**Kind**: instance method of [<code>TxBlockChainDB</code>](#TxBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| minBlockNumber | <code>Integer</code> | minimum block number |\r\n| maxBlockNumber | <code>Integer</code> | maximum block number |\r\n| callback | <code>function</code> | callback function, callback arguments (err, block object array) |\r\n\r\n### txBlockChainDB.delBlocksFromHeight(blockHeight, callback) ⇒ <code>None</code>\r\nDelete blocks which have a higher height than the input 'blockHeight' argument\r\n\r\n**Kind**: instance method of [<code>TxBlockChainDB</code>](#TxBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| blockHeight | <code>Integer</code> | blocks with larger height will be deleted from database |\r\n| callback | <code>function</code> | callback function, callback arguments (err) |\r\n\r\n<a name=\"TxBlockChainDB+addUpdateBlock\"></a>\r\n\r\n### txBlockChainDB.addUpdateBlock(pos, blockArray, callback) ⇒ <code>None</code>\r\nAdd new blocks from a specific position if the blocks does not exist<br>\r\nUpdate old blocks from a specific position if the blocks already exist\r\n\r\n**Kind**: instance method of [<code>TxBlockChainDB</code>](#TxBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| pos | <code>Integer</code> | block add/update starting position |\r\n| blockArray | <code>Array</code> | array of block data(json object) |\r\n| callback | <code>function</code> | callback function, callback arguments (err) |\r\n\r\n<a name=\"TxBlockChainDB+findTxForUser\"></a>\r\n\r\n### TxBlockChainDB.findTxForUser(userAddress, callback) ⇒ <code>None</code>\r\nFind all previous transactions for a user\r\n\r\n**Kind**: instance method of [<code>TxBlockChainDB</code>](#TxBlockChainDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| userAddress | <code>String</code> | user account address |\r\n| callback | <code>function</code> | callback function, callback arguments (txArray, err) |\r\n\r\n<br><br>\r\n\r\n## AccountDB Methods\r\n\r\n<a name=\"new_AccountDB_new\"></a>\r\n\r\n### new AccountDB(config)\r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| config | <code>Object</code> | contains the relative path for storing database |\r\n\r\n<a name=\"AccountDB+writeUserInfoToAccountDB\"></a>\r\n\r\n### accountDB.writeUserInfoToAccountDB(accDataList, callback) ⇒ <code>None</code>\r\nWrite user account information to account database\r\n\r\n**Kind**: instance method of [<code>AccountDB</code>](#AccountDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| accDataList | <code>Array, Object</code> | single user account info(json object) or a list of user account info |\r\n| callback | <code>function</code> | callback function, returns error if exist |\r\n\r\n<a name=\"AccountDB+readUserInfofromAccountDB\"></a>\r\n\r\n### accountDB.readUserInfofromAccountDB(accNameList) ⇒ <code>Promise Object</code>\r\nRead user account information from account database, returns a promise object\r\n\r\n**Kind**: instance method of [<code>AccountDB</code>](#AccountDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| accNameList | <code>Array, String</code> | single user account address(string) or a list of user account addresses |\r\n\r\n<a name=\"AccountDB+isAccountDBEmpty\"></a>\r\n\r\n### accountDB.isAccountDBEmpty(callback) ⇒ <code>None</code>\r\nCheck whether the account database is empty\r\n\r\n**Kind**: instance method of [<code>AccountDB</code>](#AccountDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| callback | <code>function</code> | callback function, callback arguments (err, emptyFlag) |\r\n\r\n<a name=\"AccountDB+getAccountDB\"></a>\r\n\r\n### accountDB.getAccountDB(callback) ⇒ <code>None</code>\r\nGet all the data in account database\r\n\r\n**Kind**: instance method of [<code>AccountDB</code>](#AccountDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| callback | <code>function</code> | callback function, callback arguments (err, block object array) |\r\n\r\n<a name=\"AccountDB+isAccountInAccountDB\"></a>\r\n\r\n### accountDB.isAccountInAccountDB(accName, callback) ⇒ <code>None</code>\r\nCheck whether an account is in AccountDB\r\n\r\n**Kind**: instance method of [<code>AccountDB</code>](#AccountDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| accName | <code>String</code> | account name |\r\n| callback | <code>function</code> | callback function, callback arguments (err, block object array) |\r\n\r\n<br><br>\r\n\r\n## ProductDB Methods\r\n\r\n<a name=\"new_ProductDB_new\"></a>\r\n\r\n### new ProductDB(config)\r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| config | <code>Object</code> | contains the relative path for storing database |\r\n\r\n<a name=\"ProductDB+writeTxBlockToDB\"></a>\r\n\r\n### productDB.writeTxBlockToDB(txData, callback) ⇒ <code>None</code>\r\nWrite single transaction block or full transaction chain data to product database\r\n\r\n**Kind**: instance method of [<code>ProductDB</code>](#ProductDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| txData | <code>Array, Object</code> | single tx block data or full transaction block chain data |\r\n| callback | <code>function</code> | callback function, returns error if exist |\r\n\r\n<a name=\"ProductDB+isProductDBEmpty\"></a>\r\n\r\n### productDB.isProductDBEmpty(callback) ⇒ <code>None</code>\r\nCheck whether the product database is empty\r\n\r\n**Kind**: instance method of [<code>ProductDB</code>](#ProductDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| callback | <code>function</code> | callback function, callback arguments (err, emptyFlag) |\r\n\r\n<a name=\"ProductDB+getProductDB\"></a>\r\n\r\n### productDB.getProductDB(callback) ⇒ <code>None</code>\r\nGet all the data in product database\r\n\r\n**Kind**: instance method of [<code>ProductDB</code>](#ProductDB)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| callback | <code>function</code> | callback function, callback arguments (err, block object array) |\r\n\r\n","readmeFilename":"README.md"}