Factor out code common for extensions
This commit is contained in:
@@ -28,25 +28,18 @@ from eth_address_declarator.declarator import AddressDeclarator
|
||||
|
||||
# local imports
|
||||
from cic.ext.eth.rpc import parse_adapter
|
||||
from cic.extension import Extension
|
||||
|
||||
logg = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class CICEth:
|
||||
class CICEth(Extension):
|
||||
|
||||
def __init__(self, chain_spec, resources, proof, signer=None, rpc=None, fee_oracle=None, outputs_writer=None):
|
||||
def __init__(self, chain_spec, resources, proof, signer=None, rpc=None, outputs_writer=None, fee_oracle=None):
|
||||
"""resources will be modified
|
||||
"""
|
||||
self.resources = resources
|
||||
self.proof = proof
|
||||
self.chain_spec = chain_spec
|
||||
self.signer = signer
|
||||
self.rpc = rpc
|
||||
super(CICEth, self).__init__(chain_spec, resources, proof, signer=signer, rpc=rpc, outputs_writer=outputs_writer)
|
||||
self.fee_oracle = fee_oracle
|
||||
self.token_details = None
|
||||
self.token_address = None
|
||||
self.token_code = None
|
||||
self.outputs = []
|
||||
self.tx_format = TxFormat.RAW_ARGS
|
||||
self.outputs_writer = outputs_writer
|
||||
if self.rpc != None:
|
||||
@@ -54,22 +47,6 @@ class CICEth:
|
||||
elif self.signer != None:
|
||||
self.tx_format = TxFormat.RLP_SIGNED
|
||||
|
||||
|
||||
def apply_token(self, token):
|
||||
return self.prepare_token(token.name, token.symbol, token.precision, token.code)
|
||||
|
||||
|
||||
def prepare_token(self, name, symbol, precision, code, extra=[], extra_types=[], positions=None):
|
||||
self.token_details = {
|
||||
'name': name,
|
||||
'symbol': symbol,
|
||||
'precision': precision,
|
||||
'code': code or '',
|
||||
'extra': extra,
|
||||
'extra_types': extra_types,
|
||||
'positions': positions,
|
||||
}
|
||||
|
||||
|
||||
def __detect_arg_type(self, v):
|
||||
typ = None
|
||||
@@ -152,7 +129,9 @@ class CICEth:
|
||||
for i in positions:
|
||||
getattr(enc, args_types[i])(args[i])
|
||||
|
||||
code = self.token_details['code'] + enc.get()
|
||||
code = enc.get()
|
||||
if self.token_code != None:
|
||||
code = self.token_code + code
|
||||
|
||||
logg.debug('resource {}'.format(self.resources))
|
||||
signer_address = add_0x(to_checksum_address(self.resources['token']['key_account']))
|
||||
@@ -185,19 +164,20 @@ class CICEth:
|
||||
if writer == None:
|
||||
writer = self.outputs_writer
|
||||
|
||||
signer_address = self.resources['token_index']['key_address']
|
||||
contract_address = self.resources['token_index']['reference']
|
||||
signer_address = add_0x(to_checksum_address(self.resources['token_index']['key_account']))
|
||||
contract_address = add_0x(to_checksum_address(self.resources['token_index']['reference']))
|
||||
|
||||
gas_oracle = OverrideGasOracle(limit=TokenUniqueSymbolIndex.gas(), conn=self.rpc)
|
||||
nonce_oracle = None
|
||||
if self.rpc != None:
|
||||
nonce_oracle = RPCNonceOracle(signer_address, conn=self.rpc)
|
||||
nonce_oracle = RPCNonceOracle(add_0x(signer_address), conn=self.rpc)
|
||||
c = TokenUniqueSymbolIndex(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
|
||||
|
||||
o = c.register(contract_address, signer_address, self.token_address, tx_format=self.tx_format)
|
||||
r = None
|
||||
if self.rpc != None:
|
||||
r = self.rpc.do(o[1])
|
||||
self.rpc.wait(r)
|
||||
elif self.signer != None:
|
||||
r = o[1]
|
||||
else:
|
||||
@@ -211,8 +191,8 @@ class CICEth:
|
||||
if writer == None:
|
||||
writer = self.outputs_writer
|
||||
|
||||
signer_address = self.resources['address_declarator']['key_address']
|
||||
contract_address = self.resources['address_declarator']['reference']
|
||||
signer_address = add_0x(to_checksum_address(self.resources['address_declarator']['key_account']))
|
||||
contract_address = add_0x(to_checksum_address(self.resources['address_declarator']['reference']))
|
||||
|
||||
gas_oracle = OverrideGasOracle(limit=AddressDeclarator.gas(), conn=self.rpc)
|
||||
nonce_oracle = None
|
||||
@@ -229,39 +209,25 @@ class CICEth:
|
||||
r = None
|
||||
if self.rpc != None:
|
||||
r = self.rpc.do(o[1])
|
||||
self.rpc.wait(r)
|
||||
elif self.signer != None:
|
||||
r = o[1]
|
||||
else:
|
||||
r = o
|
||||
self.add_outputs(k, r)
|
||||
results.append(r)
|
||||
v = r.encode('utf-8')
|
||||
if writer != None:
|
||||
writer.write(k, r.encode('utf-8'))
|
||||
writer.write(k, v)
|
||||
|
||||
return results
|
||||
|
||||
|
||||
def prepare_extension(self):
|
||||
super(CICEth, self).prepare_extension()
|
||||
|
||||
def process(self, writer=None):
|
||||
if writer == None:
|
||||
writer = self.outputs_writer
|
||||
|
||||
tasks = []
|
||||
self.token_address = self.resources['token']['reference']
|
||||
|
||||
if self.token_address == None:
|
||||
tasks.append('token')
|
||||
|
||||
for k in self.resources.keys():
|
||||
if k == 'token':
|
||||
continue
|
||||
if self.resources[k]['reference'] != None:
|
||||
tasks.append(k)
|
||||
|
||||
for task in tasks:
|
||||
logg.debug('ciceth adapter process {}'.format(task))
|
||||
r = getattr(self, 'process_' + task)(writer=writer)
|
||||
|
||||
return self.token_address
|
||||
if self.token_address != None:
|
||||
self.token_address = add_0x(to_checksum_address(self.token_address))
|
||||
|
||||
|
||||
def new(chain_spec, resources, proof, signer_hint=None, rpc=None):
|
||||
|
||||
Reference in New Issue
Block a user