newpay-wallet-js
Version:
237 lines (206 loc) • 9.18 kB
JavaScript
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