# Buggy code
def _create_alice(
    alice_config, click_config, dev, emitter, hw_wallet, teacher_uri, min_stake
):
    #
    # Produce Alice
    #
    client_password = None
    if not alice_config.federated_only:
        if (not hw_wallet or not dev) and not click_config.json_ipc:
            client_password = get_client_password(
                checksum_address=alice_config.checksum_address
            )
    try:
        ALICE = actions.make_cli_character(
            character_config=alice_config,
            click_config=click_config,
            dev=dev,
            teacher_uri=teacher_uri,
            min_stake=min_stake,
            client_password=client_password,
        )

        return ALICE
    except NucypherKeyring.AuthenticationFailed as e:
        emitter.echo(str(e), color="red", bold=True)
        click.get_current_context().exit(1)


# Traceback (nucypher.blockchain.eth.interfaces.InterfaceError)
(nucypher) derek@derek-home-server:~/nucypher/forks/david/nucypher$ nucypher ursula run --teacher <teacher_uri> --interactive



,ggg,     	gg
dP""Y8a    	88                               	,dPYb,
Yb, `88    	88                               	IP'`Yb
`"  88    	88                               	I8  8I
88    	88                               	I8  8'
88    	88   ,gggggg,	,g, 	gg  	gg  I8 dP	,gggg,gg
88    	88   dP""""8I   ,8'8,	I8  	8I  I8dP	dP"  "Y8I
88    	88  ,8'	8I  ,8'  Yb   I8,	,8I  I8P	i8'	,8I
Y8b,____,d88,,dP 	Y8,,8'_   8) ,d8b,  ,d8b,,d8b,_ ,d8,   ,d8b,
"Y888888P"Y88P  	`Y8P' "YY8P8P8P'"Y88P"`Y88P'"Y88P"Y8888P"`Y8


the Untrusted Re-Encryption Proxy.


Enter password to unlock account 0x4a0A9e421B624410DAf3AF42707F7c5973a2C963:
Enter NuCypher keyring password:
Decrypting NuCypher keyring...
Starting Ursula on <my_ip>:9151
Connecting to goerli
Working ~ Keep Ursula Online!
Attached 0xf6B42791C096C94F92AA0938fA13C93B0eD1EB2A@<my_ip>:9151
⛰ ⚘ | Ivory Mountain DarkOrchid Flower

Type 'help' or '?' for help
Ursula(0xf6B4279) >>> confirm_activity
Unhandled Error
Traceback (most recent call last):
File "/home/derek/.local/share/virtualenvs/nucypher-yyLOaW15/lib/python3.6/site-packages/twisted/python/log.py", line 103, in callWithLogger
return callWithContext({"system": lp}, func, *args, **kw)
File "/home/derek/.local/share/virtualenvs/nucypher-yyLOaW15/lib/python3.6/site-packages/twisted/python/log.py", line 86, in callWithContext
return context.call({ILogContext: newCtx}, func, *args, **kw)
File "/home/derek/.local/share/virtualenvs/nucypher-yyLOaW15/lib/python3.6/site-packages/twisted/python/context.py", line 122, in callWithContext
return self.currentContext().callWithContext(ctx, func, *args, **kw)
File "/home/derek/.local/share/virtualenvs/nucypher-yyLOaW15/lib/python3.6/site-packages/twisted/python/context.py", line 85, in callWithContext
return func(*args,**kw)
--- <exception caught here> ---
File "/home/derek/.local/share/virtualenvs/nucypher-yyLOaW15/lib/python3.6/site-packages/twisted/internet/posixbase.py", line 614, in _doReadOrWrite
why = selectable.doRead()
File "/home/derek/.local/share/virtualenvs/nucypher-yyLOaW15/lib/python3.6/site-packages/twisted/internet/process.py", line 291, in doRead
return fdesc.readFromFD(self.fd, self.dataReceived)
File "/home/derek/.local/share/virtualenvs/nucypher-yyLOaW15/lib/python3.6/site-packages/twisted/internet/fdesc.py", line 94, in readFromFD
callback(output)
File "/home/derek/.local/share/virtualenvs/nucypher-yyLOaW15/lib/python3.6/site-packages/twisted/internet/process.py", line 295, in dataReceived
self.proc.childDataReceived(self.name, data)
File "/home/derek/.local/share/virtualenvs/nucypher-yyLOaW15/lib/python3.6/site-packages/twisted/internet/_posixstdio.py", line 77, in childDataReceived
self.protocol.dataReceived(data)
File "/home/derek/.local/share/virtualenvs/nucypher-yyLOaW15/lib/python3.6/site-packages/twisted/protocols/basic.py", line 572, in dataReceived
why = self.lineReceived(line)
File "/home/derek/nucypher/forks/david/nucypher/nucypher/cli/processes.py", line 148, in lineReceived
self.__commands[line]()
File "/home/derek/nucypher/forks/david/nucypher/nucypher/cli/processes.py", line 183, in confirm_activity
return self.ursula.confirm_activity()
File "/home/derek/nucypher/forks/david/nucypher/nucypher/blockchain/eth/actors.py", line 70, in wrapped
return func(actor, *args, **kwargs)
File "/home/derek/nucypher/forks/david/nucypher/nucypher/blockchain/eth/actors.py", line 77, in wrapped
receipt = actor_method(self, *args, **kwargs)
File "/home/derek/nucypher/forks/david/nucypher/nucypher/blockchain/eth/actors.py", line 662, in confirm_activity
receipt = self.staking_agent.confirm_activity(worker_address=self.__worker_address)
File "/home/derek/nucypher/forks/david/nucypher/nucypher/blockchain/eth/agents.py", line 279, in confirm_activity
receipt = self.blockchain.send_transaction(contract_function=contract_function, sender_address=worker_address)
File "/home/derek/nucypher/forks/david/nucypher/nucypher/blockchain/eth/interfaces.py", line 353, in send_transaction
raise self.InterfaceError(str(READ_ONLY_INTERFACE))
nucypher.blockchain.eth.interfaces.InterfaceError: READ_ONLY_INTERFACE

# Fixed code
def _create_alice(
    alice_config,
    click_config,
    dev,
    emitter,
    hw_wallet,
    teacher_uri,
    min_stake,
    load_seednodes=True,
):
    #
    # Produce Alice
    #
    client_password = None
    if not alice_config.federated_only:
        if (not hw_wallet or not dev) and not click_config.json_ipc:
            client_password = get_client_password(
                checksum_address=alice_config.checksum_address
            )
    try:
        ALICE = actions.make_cli_character(
            character_config=alice_config,
            click_config=click_config,
            unlock_keyring=not dev,
            teacher_uri=teacher_uri,
            min_stake=min_stake,
            client_password=client_password,
            load_preferred_teachers=load_seednodes,
            start_learning_now=load_seednodes,
        )

        return ALICE
    except NucypherKeyring.AuthenticationFailed as e:
        emitter.echo(str(e), color="red", bold=True)
        click.get_current_context().exit(1)