Example #1
0
    tryToSetCurrentAccount() {
        if (accountStorage.has("currentAccount")) {
            return this.setCurrentAccount(accountStorage.get("currentAccount"));
        }

        let {starredAccounts} = SettingsStore.getState();
        if (starredAccounts.size) {
            return this.setCurrentAccount(starredAccounts.first().name);
        }
        if (this.state.linkedAccounts.size) {
            return this.setCurrentAccount(this.state.linkedAccounts.first());
        }  
    }
Example #2
0
    process_transaction(tr, signer_pubkeys, broadcast, extra_keys = []) {
        const passwordLogin = SettingsStore.getState().settings.get(
            "passwordLogin"
        );

        if (
            !passwordLogin &&
            Apis.instance().chain_id !== this.state.wallet.chain_id
        )
            return Promise.reject(
                "Mismatched chain_id; expecting " +
                    this.state.wallet.chain_id +
                    ", but got " +
                    Apis.instance().chain_id
            );

        return WalletUnlockActions.unlock()
            .then(() => {
                AccountActions.tryToSetCurrentAccount();
                return Promise.all([
                    tr.set_required_fees(),
                    tr.update_head_block()
                ]).then(() => {
                    let signer_pubkeys_added = {};
                    if (signer_pubkeys) {
                        // Balance claims are by address, only the private
                        // key holder can know about these additional
                        // potential keys.
                        let pubkeys = PrivateKeyStore.getPubkeys_having_PrivateKey(
                            signer_pubkeys
                        );
                        if (!pubkeys.length)
                            throw new Error("Missing signing key");

                        for (let pubkey_string of pubkeys) {
                            let private_key = this.getPrivateKey(pubkey_string);
                            tr.add_signer(private_key, pubkey_string);
                            signer_pubkeys_added[pubkey_string] = true;
                        }
                    }

                    return tr
                        .get_potential_signatures()
                        .then(({pubkeys, addys}) => {
                            let my_pubkeys = PrivateKeyStore.getPubkeys_having_PrivateKey(
                                pubkeys.concat(extra_keys),
                                addys
                            );

                            //{//Testing only, don't send All public keys!
                            //    let pubkeys_all = PrivateKeyStore.getPubkeys() // All public keys
                            //    tr.get_required_signatures(pubkeys_all).then( required_pubkey_strings =>
                            //        console.log('get_required_signatures all\t',required_pubkey_strings.sort(), pubkeys_all))
                            //    tr.get_required_signatures(my_pubkeys).then( required_pubkey_strings =>
                            //        console.log('get_required_signatures normal\t',required_pubkey_strings.sort(), pubkeys))
                            //}
                            return tr
                                .get_required_signatures(my_pubkeys)
                                .then(required_pubkeys => {
                                    for (let pubkey_string of required_pubkeys) {
                                        if (signer_pubkeys_added[pubkey_string])
                                            continue;
                                        let private_key = this.getPrivateKey(
                                            pubkey_string
                                        );
                                        if (!private_key)
                                            // This should not happen, get_required_signatures will only
                                            // returned keys from my_pubkeys
                                            throw new Error(
                                                "Missing signing key for " +
                                                    pubkey_string
                                            );
                                        tr.add_signer(
                                            private_key,
                                            pubkey_string
                                        );
                                    }
                                });
                        })
                        .then(() => {
                            if (broadcast) {
                                if (this.confirm_transactions) {
                                    let p = new Promise((resolve, reject) => {
                                        TransactionConfirmActions.confirm(
                                            tr,
                                            resolve,
                                            reject
                                        );
                                    });
                                    return p;
                                } else return tr.broadcast();
                            } else return tr.serialize();
                        });
                });
            })
            .catch(() => {});
    }