def sweep(ctx): """ Sweep your machine wallet to your primary wallet. \b Sweep your machine wallet to your primary wallet. $ 21 sell sweep """ manager = ctx.obj['manager'] logger.info(click.style("Sweeping all service balances.", fg=cli_helpers.TITLE_COLOR)) provider = TwentyOneProvider() try: wallet = Two1Wallet.import_from_mnemonic(provider, manager.get_services_mnemonic()) except Exception: logger.info(click.style("Error: unable to import wallet mnemonic. Please check to make " "sure the mnemonic exists in %s " "or contact [email protected]." % Two1Composer.COMPOSE_FILE, fg="magenta")) utxos = wallet.get_utxos(include_unconfirmed=True, accounts=wallet._accounts) utxo_sum = wallet._sum_utxos(utxos) fee_amounts = txn_fees.get_fees() total_value, num_utxos = utxo_sum def fee_calc_small(num_utxos, total_value, fee_amounts): maybe_fee = _fee_calc(num_utxos, total_value, fee_amounts) return int(min([total_value / 2, maybe_fee])) fee = fee_calc_small(num_utxos, total_value, fee_amounts) if click.confirm(click.style("Sweeping %s satoshis to your primary wallet. This will incur a " "fee of approximately %d satoshis.\n" "Would you like to continue?" % (total_value, fee), fg=cli_helpers.PROMPT_COLOR)): master = Two1Wallet(manager.composer.wallet_file, provider) try: wallet.sweep(master.current_address, fee_calculator=fee_calc_small) except WalletBalanceError: cli_helpers.print_str("Sweep", ["Wallet balance (%d satoshis) is less than the dust " "limit. Not Sweeping." % total_value], "FAILED", False) except DustLimitError: cli_helpers.print_str("Sweep", ["Wallet balance (%d satoshis) would be below the " "dust limit when fees are deducted. " "Aborting sweep." % total_value], "FAILED", False) else: cli_helpers.print_str("Sweep", ["Swept %d satoshis, excluding %d satoshis of " "fees" % (total_value - fee, fee)], "SUCCESS", True) else: sys.exit()
def __init__(self): self._connected = ComposerState.DISCONNECTED self.provider = TwentyOneProvider() self.default_wallet = Two1Wallet(self.wallet_file, self.provider)