44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
# standard imports
|
||
import logging
|
||
|
||
# external imports
|
||
from chainlib.connection import (
|
||
RPCConnection,
|
||
ConnType,
|
||
)
|
||
from chainlib.eth.connection import EthUnixSignerConnection
|
||
from chainlib.chain import ChainSpec
|
||
|
||
logg = logging.getLogger(__name__)
|
||
|
||
|
||
class RPC:
|
||
|
||
def __init__(self, chain_spec, rpc_provider, signer_provider=None):
|
||
self.chain_spec = chain_spec
|
||
self.rpc_provider = rpc_provider
|
||
self.signer_provider = signer_provider
|
||
|
||
|
||
def get_default(self):
|
||
return RPCConnection.connect(self.chain_spec, 'default')
|
||
|
||
|
||
@staticmethod
|
||
def from_config(config):
|
||
chain_spec = ChainSpec.from_chain_str(config.get('CHAIN_SPEC'))
|
||
RPCConnection.register_location(config.get('RPC_HTTP_PROVIDER'), chain_spec, 'default')
|
||
if config.get('SIGNER_PROVIDER'):
|
||
RPCConnection.register_constructor(ConnType.UNIX, EthUnixSignerConnection, tag='signer')
|
||
RPCConnection.register_location(config.get('SIGNER_PROVIDER'), chain_spec, 'signer')
|
||
rpc = RPC(chain_spec, config.get('RPC_HTTP_PROVIDER'), signer_provider=config.get('SIGNER_PROVIDER'))
|
||
logg.info('set up rpc: {}'.format(rpc))
|
||
return rpc
|
||
|
||
|
||
def __str__(self):
|
||
return 'RPC factory, chain {}, rpc {}, signer {}'.format(self.chain_spec, self.rpc_provider, self.signer_provider)
|
||
|
||
|
||
|