UNPKG

newpay-wallet-js

Version:

237 lines (206 loc) 9.18 kB
import {Apis, Manager} from "bitsharesjs-ws"; import {ChainStore, FetchChain} from "bitsharesjs/es"; import iDB from './idb-instance.js'; import WalletDb from './WalletDb.js' import WalletManagerStore from './WalletManagerStore.js' import WalletActions from './WalletActions.js' import AccountStore from './AccountStore.js' import ApplicationApi from './ApplicationApi.js' import PrivateKeyStore from './PrivateKeyStore.js' import Transfer from './Transfer.js' import QueryChainStore from './QueryChainStore.js' import Utils from "./lib/common/utils.js"; import Immutable from "immutable"; import AccountRefsStore from './AccountRefsStore.js' let newpay_password = "newpaypassword987654321"; class NewpayInstance{ // static getInstance() { // if (!NewpayInstance.instance) { // NewpayInstance.instance = new NewpayInstance(); // } // return NewpayInstance.instance; // } //初始化 static init(connection_url){ let urls = [connection_url]; let connectionManager = new Manager({url: connection_url, urls}); return connectionManager.connectWithFallback(true).then(() => { iDB.close(); let db = iDB.init_instance(indexedDB).init_promise; return Promise.all([db]).then(() => { return Promise.all([ PrivateKeyStore.onLoadDbData().then(()=> { AccountRefsStore.loadDbData(); }), WalletDb.loadDbData(), WalletManagerStore.init() ]).then(()=> { return ChainStore.init().then(() => { return Promise.all([ AccountStore.loadDbData(Apis.instance().chainId) ]).then(() => { return AccountStore.tryToSetCurrentAccount(); }).catch(error => { console.log("[NewpayInstance.js] ----- ERROR ----->", error); return Promise.reject(error); }); }).catch(error => { console.log("[NewpayInstance.js] ----- ChainStore.init error ----->", error); return Promise.reject(error); }); }); }); }) } //创建钱包和账户 static createWalletAndAccount(walletName, accountName, faucet_url, password=''){ if(password == ''){ password = newpay_password; } let key = "__graphene__"+AccountStore._getCurrentAccountKey(); let databaseName = QueryChainStore.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(walletName, password).then(()=> { //钱包的名字 ,钱包的密码六位密码 console.log("Congratulations, your wallet was successfully created."); return WalletActions.createAccount(accountName, null, null, 0, null, faucet_url).then( AccountStore.onCreateAccount(accountName) ).then( () =>{ return FetchChain("getAccount", name) }).catch(error =>{ console.log("ERROR AccountActions.createAccount", error); let error_msg = error.base && error.base.length && error.base.length > 0 ? error.base[0] : "unknown error"; if (error.remote_ip) error_msg = error.remote_ip[0]; return Promise.reject(error_msg); }) }) }) }) }) // return WalletManagerStore.onSetWallet(walletName, newpay_password).then(()=> { //钱包的名字 ,钱包的密码六位密码 // console.log("Congratulations, your wallet was successfully created."); // return WalletActions.createAccount(accountName, null, null, 0, null).then( // AccountStore.onCreateAccount(accountName) // ).then( () =>{ // return FetchChain("getAccount", name) // }).catch(error =>{ // console.log("ERROR AccountActions.createAccount", error); // let error_msg = error.base && error.base.length && error.base.length > 0 ? error.base[0] : "unknown error"; // if (error.remote_ip) error_msg = error.remote_ip[0]; // return Promise.reject(error_msg); // }) // }) } //转账 static transfer(fromAccount, toAccount, amount, asset_id, memo, password=''){ if(password == ''){ password = newpay_password; } if(WalletDb.validatePassword(password, true)){ let application_api = new ApplicationApi(); return application_api.transfer( fromAccount, toAccount, amount,//为用户输入的数字乘以此资产类型的精度 asset_id, memo ).then((result)=>{ console.log(result); return Promise.resolve(result); }).catch(error => { console.log(error); return Promise.reject(error) }) }else{ return Promise.reject("验证密码错误!") } } //导出脑钥 static exportBrainKey(password=''){ if(password == ''){ password = newpay_password; } if(WalletDb.validatePassword(password, true)){ return WalletDb.getBrainKey(); }else{ return false; } } //导入脑钥 static importBrainKey(walletName, brainkey_plaintext, callbackFun, password=''){ if(password == ''){ password = newpay_password; } return QueryChainStore.importBrainkey(walletName, password, brainkey_plaintext, callbackFun); } //查询余额 static getAccountBalances(name){ return QueryChainStore.listAccountBalances(name); } //查找用户是否存在 static checkAccountExists(name){ return Apis.instance().db_api().exec("lookup_accounts", [name, 20]); } //查找当前用户local_storage static getCurAccountLocalKey(){ let key = "__graphene__"+AccountStore._getCurrentAccountKey(); return JSON.parse(localStorage.getItem(key)); } //获取转账记录 static getTransferList(name, start){ return QueryChainStore.getTransferList(name, start); } //获取转账明细(返回时间和解析后的备注) static getTransferInfo(block_num, trx_in_block, password=''){ let res_obj = {}; if(password == ''){ password = newpay_password; } if(WalletDb.validatePassword(password, true)){ return Apis.instance().db_api().exec("get_transaction", [block_num, trx_in_block]).then((res)=>{ res_obj["expiration"] = res.expiration; if(res.operations[0][1].memo){ //解析备注 res_obj["memo"] = PrivateKeyStore.decodeMemo(res.operations[0][1].memo).text; } return res_obj; }) }else{ return res_obj; } } //修改本地密码 static changePassword(old_password, new_password){ if(old_password == ''){ old_password = newpay_password; } if(new_password == ''){ new_password = newpay_password; } return WalletDb.changePassword(old_password, new_password, true); } //验证密码 static validatePassword(password){ return WalletDb.validatePassword(password, true); } //检测用户名是否合法 static validateAccountName(accountName){ let info = accountName === "" ? "请输入一个合法账户名称" : QueryChainStore.is_account_name_error(accountName); if( ! info && ! QueryChainStore.is_cheap_name( accountName )){ info = "这是高级账户名。高级账户名的注册需要花费更多,因为无法通过免费水龙头服务进行注册。请选择其他名字,包含至少一个横杠、数字或者不含元音字母"; } return info; } } //var NewpayInstanceWrapped = NewpayInstance.getInstance(); //export default NewpayInstanceWrapped export default NewpayInstance