80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
# external imports
|
|
from chainlib.settings import process_settings as base_process_settings
|
|
from chainlib.error import SignerMissingException
|
|
from hexathon import add_0x
|
|
|
|
# local imports
|
|
import chainlib.eth.cli
|
|
|
|
|
|
def process_settings_rpc(settings, config):
|
|
rpc = chainlib.eth.cli.Rpc(settings.get('WALLET'))
|
|
conn = rpc.connect_by_config(config)
|
|
|
|
try:
|
|
settings.set('SIGNER', rpc.get_signer())
|
|
sender_address = rpc.get_sender_address()
|
|
settings.set('SENDER_ADDRESS', add_0x(sender_address))
|
|
except AttributeError:
|
|
pass
|
|
except SignerMissingException:
|
|
pass
|
|
|
|
gas_oracle = rpc.get_gas_oracle()
|
|
settings.set('GAS_ORACLE', gas_oracle)
|
|
|
|
nonce_oracle = rpc.get_nonce_oracle()
|
|
settings.set('NONCE_ORACLE', nonce_oracle)
|
|
|
|
settings.set('CONN', conn)
|
|
settings.set('RPC_ID_GENERATOR', rpc.id_generator)
|
|
settings.set('RPC_SEND', config.true('_RPC_SEND'))
|
|
return settings
|
|
|
|
|
|
def process_settings_wallet(settings, config):
|
|
wallet = chainlib.eth.cli.Wallet()
|
|
wallet.from_config(config)
|
|
|
|
recipient_in = None
|
|
try:
|
|
recipient_in = config.get('_RECIPIENT')
|
|
except KeyError:
|
|
return settings
|
|
|
|
if wallet.get_signer_address() == None and recipient_in != None:
|
|
recipient_in = wallet.from_address(recipient_in)
|
|
|
|
recipient = add_0x(recipient_in)
|
|
|
|
if not config.true('_UNSAFE') and recipient != recipient_in:
|
|
raise ValueError('invalid checksum address: {}'.format(recipient_in))
|
|
|
|
|
|
settings.set('WALLET', wallet)
|
|
settings.set('RECIPIENT', recipient)
|
|
return settings
|
|
|
|
|
|
def process_settings_contract(settings, config):
|
|
exec_address_in = None
|
|
try:
|
|
exec_address_in = config.get('_EXEC_ADDRESS')
|
|
except KeyError:
|
|
return settings
|
|
|
|
exec_address = add_0x(exec_address_in)
|
|
|
|
if not config.true('_UNSAFE') and exec_address != exec_address_in:
|
|
raise ValueError('invalid checksum address: {}'.format(exec_address_in))
|
|
|
|
settings.set('EXEC', exec_address)
|
|
return settings
|
|
|
|
|
|
def process_settings(settings, config):
|
|
settings = base_process_settings(settings, config)
|
|
settings = process_settings_wallet(settings, config)
|
|
settings = process_settings_rpc(settings, config)
|
|
return settings
|