UNPKG

newpay-wallet-js

Version:

462 lines (416 loc) 21.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _bitsharesjsWs = require("bitsharesjs-ws"); var _es = require("bitsharesjs/es"); var _utils = require("./lib/common/utils.js"); var _utils2 = _interopRequireDefault(_utils); var _immutable = require("immutable"); var _immutable2 = _interopRequireDefault(_immutable); var _idbInstance = require("./idb-instance.js"); var _idbInstance2 = _interopRequireDefault(_idbInstance); var _WalletManagerStore = require("./WalletManagerStore.js"); var _WalletManagerStore2 = _interopRequireDefault(_WalletManagerStore); var _AccountStore = require("./AccountStore.js"); var _AccountStore2 = _interopRequireDefault(_AccountStore); var _WalletDb = require("./WalletDb.js"); var _WalletDb2 = _interopRequireDefault(_WalletDb); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // -------for test------- //Apis.instance("wss://bitshares.openledger.info/ws", true).init_promise.then((res) => { /* Apis.instance("wss://bit.btsabc.org/ws", true).init_promise.then((res) => { console.log("connected to:", res[0].network); ChainStore.init().then(() => { //ChainStore.subscribe(updateState); //ChainStore.subscribe(getObject); // ChainStore.subscribe(getBitcrabAccount); // ChainStore.subscribe(listAccountBalances); ChainStore.subscribe(listAccountHistory); }) });*/ //-----------------for test--------- var QueryChainStore = function () { function QueryChainStore() { _classCallCheck(this, QueryChainStore); this.state = this._getInitialState(); } _createClass(QueryChainStore, [{ key: "_getInitialState", value: function _getInitialState() { return { new_wallet: undefined, // pending restore current_wallet: undefined, wallet_names: _immutable2.default.Set() }; } }, { key: "listAccountBalances_old", value: function listAccountBalances_old(name) { var bal = []; //name = "dylan-1234567"; return _bitsharesjsWs.Apis.instance().db_api().exec("get_named_account_balances", [name, []]).then(function (balance_objects) { var balanceJson = balance_objects; return balanceJson; }).then(function (balance_objects) { //console.log("balanceJson2:",balance_object); balance_objects.map(function (balance_object) { //console.log("balance_object:",balance_object) bal.push(_bitsharesjsWs.Apis.instance().db_api().exec("get_objects", [[balance_object.asset_id]]).then(function (asset) { var amount = Number(balance_object.amount); amount = _utils2.default.get_asset_amount(amount, asset[0]); var result = Object.assign({}, balance_object, { "amount": amount, "precision": asset[0].precision, "symbol": asset[0].symbol }); return result; })); //var asset = ChainStore.getAsset(balance_object.asset_id); //let amount = Number(balance_object.amount); //amount = Utils.get_asset_amount(amount,asset); //return Object.assign({},balance_object,{"amount":amount,"precision":asset.toJS().precision,"symbol":asset.toJS().symbol}) }); return Promise.all(bal); }); } }, { key: "listAccountBalances", value: function listAccountBalances(name) { var bal = []; //name = "dylan-1234567"; return _bitsharesjsWs.Apis.instance().db_api().exec("get_named_account_balances", [name, []]).then(function (balance_objects) { var balanceJson = balance_objects; return balanceJson; }).then(function (balance_objects) { //console.log("balanceJson2:",balance_object); balance_objects.map(function (balance_object) { //console.log("balance_object:",balance_object) bal.push(_bitsharesjsWs.Apis.instance().db_api().exec("get_objects", [[balance_object.asset_id]]).then(function (asset) { var str_symbol = asset[0].symbol; if (asset[0].bitasset_data_id) { var excludeList = ["BTWTY", "BANCOR", "BTCSHA", "CROWDFUN", "DRAGON", "TESTME"]; if (excludeList.indexOf(asset[0].symbol) === -1) { str_symbol = "bit" + str_symbol; } } var amount = Number(balance_object.amount); amount = _utils2.default.get_asset_amount(amount, asset[0]); var result = Object.assign({}, balance_object, { "amount": amount, "precision": asset[0].precision, "symbol": str_symbol }); return result; })); //var asset = ChainStore.getAsset(balance_object.asset_id); //let amount = Number(balance_object.amount); //amount = Utils.get_asset_amount(amount,asset); //return Object.assign({},balance_object,{"amount":amount,"precision":asset.toJS().precision,"symbol":asset.toJS().symbol}) }); return Promise.all(bal); }); } /** * 获取所有历史记录 * 0 代表转账记录,4:订单撮合,1:限价单,5:创建账户 */ }, { key: "listAccountHistory", value: function listAccountHistory(name) { //name = "dylan-1234567"; //name = "1.2.446822" var trans_type = 0; var accountInfo = _es.ChainStore.getAccount(name); //console.log("accountInfo:"+ JSON.stringify(accountInfo)) if (accountInfo) { _es.ChainStore.fetchRecentHistory(accountInfo).then(function (history_objects) { //console.log("history_objects:",JSON.stringify(history_objects)); return JSON.stringify(history_objects); }); } else { console.log("accountInfo null"); } } //默认为0 , 0 代表转账记录,4:订单撮合,1:限价单,5:创建账户 }, { key: "listAccountHistory2", value: function listAccountHistory2(name) { var trans_type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; //name = "dylan-1234567"; var accountInfo = _es.ChainStore.getAccount(name); //console.log("accountInfo:"+ JSON.stringify(accountInfo)) if (accountInfo) { var accountInfoJson = accountInfo.toJS(); var historys = accountInfoJson.history; // console.log("history:",historys); if (historys) { var historyJson; if (trans_type == 100) { historyJson = JSON.stringify(historys); } else if (trans_type == "0") { var historyArr = []; historys.map(function (history) { if (history.op[0] == trans_type) { historyArr.push(history.op); } }); historyJson = JSON.stringify(historyArr); } console.log("historyJson:", historyJson); return historyJson; } } } }, { key: "lookupAccounts", value: function lookupAccounts(name, limit) { return _bitsharesjsWs.Apis.instance().db_api().exec("lookup_accounts", [name, limit]); } }, { key: "getDatabaseName", value: function getDatabaseName() { var current_wallet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "default"; var chain_id = _bitsharesjsWs.Apis.instance().chain_id; return ["graphene_v2", chain_id ? chain_id.substring(0, 6) : "", current_wallet].join("_"); } }, { key: "getRootDatabaseName", value: function getRootDatabaseName() { var chain_id = _bitsharesjsWs.Apis.instance().chain_id; var chain_substring = chain_id ? chain_id.substring(0, 6) : ""; return "graphene_db" + "_" + chain_substring; } }, { key: "deleteDatabase", value: function deleteDatabase(databaseName) { var req = _idbInstance2.default.impl.deleteDatabase(databaseName); return req; } }, { key: "importBrainkey22", value: function importBrainkey22(wallet_name, waleet_pw, brainkey_plaintext) {} }, { key: "importBrainkey", value: function importBrainkey(wallet_name, waleet_pw, brainkey_plaintext, callbackFun) { var _this = this; var private_key = _es.key.get_brainPrivateKey(brainkey_plaintext); var pubkey = private_key.toPublicKey().toPublicKeyString(); return _bitsharesjsWs.Apis.instance().db_api().exec("get_key_references", [[pubkey]]).then(function (res) { if (!res || !res.length) { return Promise.reject("账号不存在!"); } var new_curAccountID = res[0][0]; return _bitsharesjsWs.Apis.instance().db_api().exec("get_accounts", [[new_curAccountID]]).then(function (acc_result) { var new_curAccountName = acc_result[0].name; var key = "account"; var curAccount = localStorage.getItem(key); // let pro = new Promise((resolve, reject) =>{ // let databaseName = this.getDatabaseName(); // iDB.impl.deleteDatabase(databaseName); // localStorage.removeItem(key); // iDB.close(); // return iDB.init_instance().init_promise.then(()=>{ // let setRoot1 = iDB.root.setProperty("wallet_names", []); // let setRoot2 = iDB.root.setProperty("current_wallet", ""); // let setRoot3 = iDB.root.setProperty("AddressIndex", null); // return Promise.all([ setRoot1, setRoot2, setRoot3 ]).then(()=>{ // return WalletManagerStore.init().then(()=>{ // return WalletManagerStore.onSetWallet(wallet_name, waleet_pw, brainkey_plaintext).then(()=>{ // let owner_private = WalletDb.generateNextKey(); // let active_private = WalletDb.generateNextKey(); // let transaction = WalletDb.transaction_update_keys(); // let p = WalletDb.saveKeys( // [ owner_private, active_private], // //[ owner_private, active_private, memo_private ], // transaction // ); // return p.catch( (error) => { // WalletDb.decrementBrainKeySequence(); // WalletDb.decrementBrainKeySequence(); // transaction.abort(); // reject(); // }).then(()=>{ // AccountStore.onCreateAccount(new_curAccountName); // resolve(); // }); // }) // }) // }) // }) // }) if (callbackFun) { return callbackFun(new_curAccountName).then(function (res) { if (res.flag === 0) { console.log("callbackFun success"); return _this._doImportBrainkey(wallet_name, waleet_pw, brainkey_plaintext, new_curAccountName); } else { console.log("callbackFun fail"); return Promise.reject(res.value); } }).catch(function (call_err) { return Promise.reject(call_err); }); } else { console.log("NO callbackFun success"); return _this._doImportBrainkey(wallet_name, waleet_pw, brainkey_plaintext, new_curAccountName); } }); }).catch(function (err) { return Promise.reject(err); }); } }, { key: "_doImportBrainkey", value: function _doImportBrainkey(wallet_name, waleet_pw, brainkey_plaintext, new_curAccountName) { var _this2 = this; return new Promise(function (resolve, reject) { var databaseName = _this2.getDatabaseName(); _idbInstance2.default.impl.deleteDatabase(databaseName); var key = "__graphene__" + _AccountStore2.default._getCurrentAccountKey(); localStorage.removeItem(key); _idbInstance2.default.close(); return _idbInstance2.default.init_instance().init_promise.then(function () { var setRoot1 = _idbInstance2.default.root.setProperty("wallet_names", []); var setRoot2 = _idbInstance2.default.root.setProperty("current_wallet", ""); var setRoot3 = _idbInstance2.default.root.setProperty("AddressIndex", null); return Promise.all([setRoot1, setRoot2, setRoot3]).then(function () { return _WalletManagerStore2.default.init().then(function () { return _WalletManagerStore2.default.onSetWallet(wallet_name, waleet_pw, brainkey_plaintext).then(function () { var owner_private = _WalletDb2.default.generateNextKey(); var active_private = _WalletDb2.default.generateNextKey(); var transaction = _WalletDb2.default.transaction_update_keys(); var p = _WalletDb2.default.saveKeys([owner_private, active_private], //[ owner_private, active_private, memo_private ], transaction); return p.catch(function (error) { _WalletDb2.default.decrementBrainKeySequence(); _WalletDb2.default.decrementBrainKeySequence(); transaction.abort(); reject(); }).then(function () { _AccountStore2.default.onCreateAccount(new_curAccountName); resolve(); }); }); }); }); }); }); } //查询交易列表 }, { key: "getTransferList", value: function getTransferList(name, start) { var _this3 = this; var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 5; if (start == "" || start == null) { start = "1.11.0"; } else { var start_index = start.lastIndexOf(".") + 1; var start_num = parseInt(start.slice(start_index)) - 1; start = "1.11." + start_num; } return _bitsharesjsWs.Apis.instance().db_api().exec("get_account_by_name", [name]).then(function (res_account) { return _bitsharesjsWs.Apis.instance().history_api().exec("get_account_history", [res_account.id, "1.11.0", 5, start]).then(function (res) { return Promise.all(res.map(_this3.getTransferListResult)).then(function (res_obj) { return res_obj.filter(function (item) { return item !== null; }); }); }); }); } }, { key: "getTransferListResult", value: function getTransferListResult(res) { if (res.op[0] != 0) { return null; } var result = {}; var history_id = res.id; var form_id = res.op[1].from; var to_id = res.op[1].to; var amount_asset_id = res.op[1].amount.asset_id; var amount = res.op[1].amount.amount; var block_num = res.block_num; var trx_in_block = res.trx_in_block; return new Promise(function (resolve, reject) { _bitsharesjsWs.Apis.instance().db_api().exec("get_objects", [[form_id, to_id, amount_asset_id], true]).then(function (r) { result["history_id"] = history_id; result["from_name"] = r[0].name; result["from_id"] = form_id; result["to_name"] = r[1].name; result["to_id"] = to_id; result["amount_id"] = amount_asset_id; result["amount_name"] = r[2].symbol; result["amount_precision"] = r[2].precision; result["amount"] = amount; result["real_amount"] = amount / Math.pow(10, r[2].precision); result["block_num"] = block_num; result["trx_in_block"] = trx_in_block; resolve(result); }); }); } }, { key: "is_account_name_error", value: function is_account_name_error(value) { var allow_too_short = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var i, label, len, length, ref, suffix; if (allow_too_short == null) { allow_too_short = false; } suffix = "账户名称"; if (this.is_empty(value)) { return suffix + "不能为空."; } length = value.length; if (!allow_too_short && length < 3) { return suffix + "长度要大于3."; } if (length > 63) { return suffix + "长度要小于63."; } if (/\./.test(value)) { suffix = "账户名称应该"; } ref = value.split('.'); for (i = 0, len = ref.length; i < len; i++) { label = ref[i]; if (!/^[~a-z]/.test(label)) { return suffix + "以字母开头."; } if (!/^[~a-z0-9-]*$/.test(label)) { return suffix + "只有字母、数字或破折号."; } if (/--/.test(label)) { return suffix + "只有一个破折号."; } if (!/[a-z0-9]$/.test(label)) { return suffix + "以字母或数字结尾."; } if (!(label.length >= 3)) { return suffix + "长度大于3"; } } return null; } }, { key: "is_empty", value: function is_empty(value) { return value == null || value.length === 0; } }, { key: "is_cheap_name", value: function is_cheap_name(account_name) { return (/[0-9-]/.test(account_name) || !/[aeiouy]/.test(account_name) ); } }], [{ key: "getInstance", value: function getInstance() { if (!QueryChainStore.instance) { QueryChainStore.instance = new QueryChainStore(); } return QueryChainStore.instance; } }]); return QueryChainStore; }(); var QueryChainStoreWrapped = QueryChainStore.getInstance(); exports.default = QueryChainStoreWrapped;