UNPKG

newpay-wallet-js

Version:

307 lines (264 loc) 12.2 kB
import WalletDb from "./WalletDb.js"; import WalletUnlockActions from "./WalletUnlockActions.js"; //import CachedPropertyActions from "actions/CachedPropertyActions"; //import ApplicationApi from "api/ApplicationApi.js"; import {TransactionBuilder, FetchChain} from "bitsharesjs/es"; import {Apis} from "bitsharesjs-ws"; //import SettingsStore from "stores/SettingsStore"; class WalletActions { /** Restore and make active a new wallet_object. */ restore(wallet_name = "default", wallet_object) { wallet_name = wallet_name.toLowerCase(); return {wallet_name, wallet_object}; } static getInstance() { if (!WalletActions.instance) { WalletActions.instance = new WalletActions(); } return WalletActions.instance; } /** Make an existing wallet active or create a wallet (and make it active). If <b>wallet_name</b> does not exist, provide a <b>create_wallet_password</b>. */ setWallet(wallet_name, create_wallet_password, brnkey) { WalletUnlockActions.lock(); if( !wallet_name) wallet_name = "default"; return (dispatch) => { return new Promise( resolve => { dispatch({wallet_name, create_wallet_password, brnkey, resolve}); }); }; } setBackupDate() { CachedPropertyActions.set("backup_recommended", false); return true; } setBrainkeyBackupDate() { return true; } /* cyj delete from 20171023 createAccountWithPassword( account_name, password, registrar, referrer, referrer_percent, refcode ) { let {privKey : owner_private} = WalletDb.generateKeyFromPassword(account_name, "owner", password); let {privKey: active_private} = WalletDb.generateKeyFromPassword(account_name, "active", password); console.log("create account:", account_name); console.log("new active pubkey", active_private.toPublicKey().toPublicKeyString()); console.log("new owner pubkey", owner_private.toPublicKey().toPublicKeyString()); return new Promise((resolve, reject) => { let create_account = () => { return application_api.create_account( owner_private.toPublicKey().toPublicKeyString(), active_private.toPublicKey().toPublicKeyString(), account_name, registrar, //registrar_id, referrer, //referrer_id, referrer_percent, //referrer_percent, true //broadcast ).then(resolve).catch(reject); }; if(registrar) { // using another user's account as registrar return create_account(); } else { // using faucet let faucetAddress = SettingsStore.getSetting("faucet_address"); if (window && window.location && window.location.protocol === "https:") { faucetAddress = faucetAddress.replace(/http:\/\//, "https://"); } let create_account_promise = fetch( faucetAddress + "/api/v1/accounts", { method: "post", mode: "cors", headers: { "Accept": "application/json", "Content-type": "application/json" }, body: JSON.stringify({ "account": { "name": account_name, "owner_key": owner_private.toPublicKey().toPublicKeyString(), "active_key": active_private.toPublicKey().toPublicKeyString(), "memo_key": active_private.toPublicKey().toPublicKeyString(), //"memo_key": memo_private.private_key.toPublicKey().toPublicKeyString(), "refcode": refcode, "referrer": referrer } }) }).then(r => r.json().then(res => { if (!res || (res && res.error)) { reject(res.error); } else { resolve(res); } })).catch(reject); return create_account_promise.then(result => { if (result && result.error) { reject(result.error); } else { resolve(result); } }).catch(error => { reject(error); }); } }); } */ createAccount( account_name, registrar, referrer, referrer_percent, refcode, faucet_url ) { if( WalletDb.isLocked()) { let error = "wallet locked"; //this.actions.brainKeyAccountCreateError( error ) return Promise.reject( error ); } let owner_private = WalletDb.generateNextKey(); let active_private = WalletDb.generateNextKey(); //let memo_private = WalletDb.generateNextKey() let updateWallet = () => { 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 => transaction.abort() ); }; { // using faucet //faucetAddress cyj /* cyj delete 20171024 let faucetAddress = SettingsStore.getSetting("faucet_address"); if (window && window.location && window.location.protocol === "https:") { faucetAddress = faucetAddress.replace(/http:\/\//, "https://"); } */ let faucetAddress = faucet_url; let create_account_promise = fetch( faucetAddress + "/api/v1/accounts", { method: "post", mode: "cors", headers: { "Accept": "application/json", "Content-type": "application/json" }, body: JSON.stringify({ "account": { "name": account_name, "owner_key": owner_private.private_key.toPublicKey().toPublicKeyString(), "active_key": active_private.private_key.toPublicKey().toPublicKeyString(), "memo_key": active_private.private_key.toPublicKey().toPublicKeyString(), //"memo_key": memo_private.private_key.toPublicKey().toPublicKeyString(), "refcode": refcode, "referrer": referrer } }) }); return create_account_promise.then(result => { if (result.error) { throw result.error; } return updateWallet(); }).catch(error => { /* * Since the account creation failed, we need to decrement the * sequence used to generate private keys from the brainkey. Two * keys were generated, so we decrement twice. */ WalletDb.decrementBrainKeySequence(); WalletDb.decrementBrainKeySequence(); throw error; }); } } /* cyj delete 20171024  claimVestingBalance(account, cvb, forceAll = false) { let tr = new TransactionBuilder(); let balance = cvb.balance.amount, earned = cvb.policy[1].coin_seconds_earned, vestingPeriod = cvb.policy[1].vesting_seconds, availablePercent = forceAll ? 1 : earned / (vestingPeriod * balance); tr.add_type_operation("vesting_balance_withdraw", { fee: { amount: "0", asset_id: "1.3.0"}, owner: account, vesting_balance: cvb.id, amount: { amount: Math.floor(balance * availablePercent), asset_id: cvb.balance.asset_id } }); return WalletDb.process_transaction(tr, null, true) .then(result => { }) .catch(err => { console.log("vesting_balance_withdraw err:", err); }); } */ /* @parm balances is an array of balance objects with two additional values: {vested_balance, public_key_string} */ /* cyj delete 20171024  importBalance( account_name_or_id, balances, broadcast) { return (dispatch) => { return new Promise((resolve, reject) => { let db = Apis.instance().db_api(); let address_publickey_map = {}; let account_lookup = FetchChain("getAccount", account_name_or_id); let unlock = WalletUnlockActions.unlock(); let p = Promise.all([ unlock, account_lookup ]).then( (results)=> { let account = results[1]; //DEBUG console.log('... account',account) if(account == void 0) return Promise.reject("Unknown account " + account_name_or_id); let balance_claims = []; let signer_pubkeys = {}; for(let balance of balances) { let {vested_balance, public_key_string} = balance; //DEBUG console.log('... balance',b) let total_claimed; if( vested_balance ) { if(vested_balance.amount == 0) // recently claimed continue; total_claimed = vested_balance.amount; } else total_claimed = balance.balance.amount; //assert if(vested_balance && vested_balance.asset_id != balance.balance.asset_id) throw new Error("Vested balance record and balance record asset_id missmatch", vested_balance.asset_id, balance.balance.asset_id ); signer_pubkeys[public_key_string] = true; balance_claims.push({ fee: { amount: "0", asset_id: "1.3.0"}, deposit_to_account: account.get("id"), balance_to_claim: balance.id, balance_owner_key: public_key_string, total_claimed: { amount: total_claimed, asset_id: balance.balance.asset_id } }); } // if( ! balance_claims.length) { // throw new Error("No balances to claim"); // } //DEBUG console.log('... balance_claims',balance_claims) let tr = new TransactionBuilder(); for(let balance_claim of balance_claims) { tr.add_type_operation("balance_claim", balance_claim); } // With a lot of balance claims the signing can take so Long // the transaction will expire. This will increase the timeout... tr.set_expire_seconds( (15 * 60) + balance_claims.length); return WalletDb.process_transaction(tr, Object.keys(signer_pubkeys), broadcast ) .then(result => { dispatch(true); return result; }); }); resolve(p); }); }; } */ } var WalletActionsIns = WalletActions.getInstance(); export default WalletActionsIns