def escrow(general_config: GroupGeneralConfig, worklock_options: WorkLockOptions, force: bool, hw_wallet: bool, value: Decimal): """Create an ETH escrow, or increase an existing escrow""" emitter, registry, blockchain = worklock_options.setup(general_config=general_config) worklock_agent = ContractAgency.get_agent(WorkLockAgent, registry=registry) # type: WorkLockAgent now = maya.now().epoch if not worklock_agent.start_bidding_date <= now <= worklock_agent.end_bidding_date: emitter.echo(BIDDING_WINDOW_CLOSED, color='red') raise click.Abort() _bidder_address = worklock_options.get_bidder_address(emitter, registry) bidder = worklock_options.create_bidder(registry=registry, hw_wallet=hw_wallet) existing_bid_amount = bidder.get_deposited_eth if not value: if force: raise click.MissingParameter("Missing --value.") if not existing_bid_amount: # It's the first bid minimum_bid = bidder.worklock_agent.minimum_allowed_bid minimum_bid_in_eth = Web3.fromWei(minimum_bid, 'ether') prompt = BID_AMOUNT_PROMPT_WITH_MIN_BID.format(minimum_bid_in_eth=minimum_bid_in_eth) else: # There's an existing bid and the bidder is increasing the amount emitter.message(EXISTING_BID_AMOUNT_NOTICE.format(eth_amount=Web3.fromWei(existing_bid_amount, 'ether'))) minimum_bid_in_eth = Web3.fromWei(1, 'ether') prompt = BID_INCREASE_AMOUNT_PROMPT value = click.prompt(prompt, type=DecimalRange(min=minimum_bid_in_eth)) value = int(Web3.toWei(Decimal(value), 'ether')) if not force: if not existing_bid_amount: paint_bidding_notice(emitter=emitter, bidder=bidder) click.confirm(f"Place WorkLock escrow of {prettify_eth_amount(value)}?", abort=True) else: click.confirm(f"Increase current escrow ({prettify_eth_amount(existing_bid_amount)}) " f"by {prettify_eth_amount(value)}?", abort=True) receipt = bidder.place_bid(value=value) emitter.message("Publishing WorkLock Escrow...") maximum = NU.from_nunits(bidder.economics.maximum_allowed_locked) available_claim = NU.from_nunits(bidder.available_claim) message = f'\nCurrent escrow: {prettify_eth_amount(bidder.get_deposited_eth)} | Allocation: {available_claim}\n' if available_claim > maximum: message += f"\nThis allocation is currently above the allowed max ({maximum}), " \ f"so the escrow may be partially refunded.\n" message += f'Note that the available allocation value may fluctuate until the escrow period closes and ' \ f'allocations are finalized.\n' emitter.echo(message, color='yellow') paint_receipt_summary(receipt=receipt, emitter=emitter, chain_name=bidder.staking_agent.blockchain.client.chain_name)
def bid(general_config, worklock_options, registry_options, force, hw_wallet, value): """Place a bid, or increase an existing bid""" emitter = _setup_emitter(general_config) registry = registry_options.get_registry(emitter, general_config.debug) worklock_agent = ContractAgency.get_agent(WorkLockAgent, registry=registry) # type: WorkLockAgent now = maya.now().epoch if not worklock_agent.start_bidding_date <= now <= worklock_agent.end_bidding_date: raise click.Abort(f"You can't bid, the bidding window is closed.") if not worklock_options.bidder_address: worklock_options.bidder_address = select_client_account(emitter=emitter, provider_uri=registry_options.provider_uri, poa=registry_options.poa, network=registry_options.network, registry=registry, show_balances=True) bidder = worklock_options.create_bidder(registry=registry, hw_wallet=hw_wallet) if not value: if force: raise click.MissingParameter("Missing --value.") existing_bid_amount = bidder.get_deposited_eth if not existing_bid_amount: # It's the first bid minimum_bid = bidder.worklock_agent.minimum_allowed_bid minimum_bid_in_eth = Web3.fromWei(minimum_bid, 'ether') prompt = f"Enter bid amount in ETH (at least {minimum_bid_in_eth} ETH)" else: # There's an existing bid and the bidder is increasing the amount emitter.message(f"You have an existing bid of {Web3.fromWei(existing_bid_amount, 'ether')} ETH") minimum_bid_in_eth = Web3.fromWei(1, 'ether') prompt = f"Enter the amount in ETH that you want to increase your bid" value = click.prompt(prompt, type=DecimalRange(min=minimum_bid_in_eth)) value = int(Web3.toWei(Decimal(value), 'ether')) if not force: paint_bidding_notice(emitter=emitter, bidder=bidder) click.confirm(f"Place WorkLock bid of {prettify_eth_amount(value)}?", abort=True) receipt = bidder.place_bid(value=value) emitter.message("Publishing WorkLock Bid...") maximum = NU.from_nunits(bidder.economics.maximum_allowed_locked) available_claim = NU.from_nunits(bidder.available_claim) message = f'Current bid: {prettify_eth_amount(bidder.get_deposited_eth)} | Claim: {available_claim}\n' if available_claim > maximum: message += f"This claim is currently above the allowed max ({maximum}), so the bid may be partially refunded.\n" message += f'Note that available claim value may fluctuate until bidding closes and claims are finalized.\n' emitter.echo(message, color='yellow') paint_receipt_summary(receipt=receipt, emitter=emitter, chain_name=bidder.staking_agent.blockchain.client.chain_name) return # Exit
"""Show current WorkLock information""" emitter, registry, blockchain = worklock_options.setup( general_config=general_config) paint_worklock_status(emitter=emitter, registry=registry) if worklock_options.bidder_address: bidder = worklock_options.create_transactionless_bidder( registry=registry) paint_bidder_status(emitter=emitter, bidder=bidder) @worklock.command() @group_general_config @group_worklock_options @option_force @option_hw_wallet @click.option('--value', help="ETH value to escrow", type=DecimalRange(min=0)) def escrow(general_config: GroupGeneralConfig, worklock_options: WorkLockOptions, force: bool, hw_wallet: bool, value: Decimal): """Create an ETH escrow, or increase an existing escrow""" emitter, registry, blockchain = worklock_options.setup( general_config=general_config) worklock_agent = ContractAgency.get_agent( WorkLockAgent, registry=registry) # type: WorkLockAgent now = maya.now().epoch if not worklock_agent.start_bidding_date <= now <= worklock_agent.end_bidding_date: emitter.echo(BIDDING_WINDOW_CLOSED, color='red') raise click.Abort() _bidder_address = worklock_options.get_bidder_address(emitter, registry) bidder = worklock_options.create_bidder(registry=registry,
emitter, registry, blockchain = worklock_options.setup( general_config=general_config) paint_worklock_status(emitter=emitter, registry=registry) if worklock_options.bidder_address: bidder = worklock_options.create_transactionless_bidder( registry=registry) paint_bidder_status(emitter=emitter, bidder=bidder) return # Exit @worklock.command() @group_general_config @group_worklock_options @option_force @option_hw_wallet @click.option('--value', help="ETH value of bid", type=DecimalRange(min=0)) def bid(general_config, worklock_options, force, hw_wallet, value): """Place a bid, or increase an existing bid""" emitter, registry, blockchain = worklock_options.setup( general_config=general_config) worklock_agent = ContractAgency.get_agent( WorkLockAgent, registry=registry) # type: WorkLockAgent now = maya.now().epoch if not worklock_agent.start_bidding_date <= now <= worklock_agent.end_bidding_date: raise click.Abort(f"You can't bid, the bidding window is closed.") if not worklock_options.bidder_address: worklock_options.bidder_address = select_client_account( emitter=emitter, provider_uri=worklock_options.provider_uri, poa=worklock_options.poa,