newpay-wallet-js
Version:
462 lines (416 loc) • 21.7 kB
JavaScript
;
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;