Implement txs
This commit is contained in:
parent
7deffc93a4
commit
75ce19845e
@ -5,6 +5,16 @@ import logging
|
||||
import re
|
||||
|
||||
# external imports
|
||||
from chainlib.eth.gas import balance
|
||||
from chainlib.eth.cli.config import Config
|
||||
from chainlib.eth.cli.config import process_config
|
||||
from chainlib.eth.cli.arg import ArgFlag
|
||||
from chainlib.eth.cli.arg import Arg
|
||||
from chainlib.eth.cli.arg import process_args
|
||||
from chainlib.settings import ChainSettings
|
||||
from chainlib.eth.settings import process_settings
|
||||
from eth_contract_registry import Registry
|
||||
import chainlib.eth.cli
|
||||
from leveldir.uuid import UUIDDir
|
||||
|
||||
# local imports
|
||||
@ -17,11 +27,57 @@ logging.basicConfig(level=logging.DEBUG)
|
||||
logg = logging.getLogger()
|
||||
|
||||
data_path = os.environ.get('GAS3_DATA_DIR', 'data')
|
||||
registry = os.environ.get('CIC_REGISTRY_ADDRESS')
|
||||
data_dir = UUIDDir(data_path)
|
||||
|
||||
re_yield = re.compile('^/yield')
|
||||
re_register = re.compile('^/register')
|
||||
|
||||
def process_settings_local(settings, config):
|
||||
conn = settings.get('CONN')
|
||||
o = balance(settings.get('SENDER_ADDRESS'))
|
||||
r = conn.do(o)
|
||||
logg.info('signing with address {} balance start {}'.format(settings.get('SENDER_ADDRESS'), int(r, 16)))
|
||||
|
||||
c = Registry(settings.get('CHAIN_SPEC'), gas_oracle=settings.get('GAS_ORACLE'))
|
||||
#o = c.address_of(registry, 'registry', sender_address=settings.get('SENDER_ADDRESS'))
|
||||
#o['params'][0]['gasPrice'] = "0x3b9aca00"
|
||||
#o['params'][0]['gas'] = "0x7530"
|
||||
#r = conn.do(o)
|
||||
#logg.info('using registry {}'.format(r))
|
||||
|
||||
o = c.address_of(registry, 'accounts', sender_address=settings.get('SENDER_ADDRESS'))
|
||||
r = conn.do(o)
|
||||
accounts_index = c.parse_address_of(r)
|
||||
settings.set('ACCOUNTS_CONTRACT', accounts_index)
|
||||
logg.info('using accounts_index {}'.format(accounts_index))
|
||||
|
||||
o = c.address_of(registry, 'faucet', sender_address=settings.get('SENDER_ADDRESS'))
|
||||
r = conn.do(o)
|
||||
faucet = c.parse_address_of(r)
|
||||
settings.set('FAUCET_CONTRACT', faucet)
|
||||
logg.info('using faucet {}'.format(faucet))
|
||||
|
||||
return settings
|
||||
|
||||
|
||||
arg_flags = ArgFlag()
|
||||
arg = Arg(arg_flags)
|
||||
flags = arg_flags.STD_WRITE | arg_flags.WALLET | arg_flags.EXEC
|
||||
argparser = chainlib.eth.cli.ArgumentParser()
|
||||
argparser = process_args(argparser, arg, flags)
|
||||
args = argparser.parse_args()
|
||||
|
||||
config = Config()
|
||||
config = process_config(config, arg, args, flags)
|
||||
logg.debug('config loaded:\n{}'.format(config))
|
||||
|
||||
settings = ChainSettings()
|
||||
settings = process_settings(settings, config)
|
||||
settings = process_settings_local(settings, config)
|
||||
logg.debug('settings loaded:\n{}'.format(settings))
|
||||
|
||||
|
||||
|
||||
def application(env, start_response):
|
||||
req = urllib.parse.urlparse(env['REQUEST_URI'])
|
||||
@ -30,10 +86,10 @@ def application(env, start_response):
|
||||
|
||||
r = ''
|
||||
if re.match(re_yield, req.path):
|
||||
r = do_yield(req, env, data_dir)
|
||||
r = do_yield(req, env, data_dir, settings)
|
||||
elif re.match(re_register, req.path):
|
||||
try:
|
||||
r = do_register(req, env, data_dir)
|
||||
r = do_register(req, env, data_dir, settings)
|
||||
except gas3.error.Used:
|
||||
scode = 410
|
||||
stext = 'Code already used'
|
||||
@ -51,7 +107,6 @@ def application(env, start_response):
|
||||
else:
|
||||
r = ''
|
||||
|
||||
|
||||
l = len(r)
|
||||
status = str(scode) + ' ' + stext
|
||||
start_response(status, [('Content-Length', str(l))])
|
||||
|
@ -5,7 +5,7 @@ import logging
|
||||
logg = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def do_yield(req, env, data_dir):
|
||||
def do_yield(req, env, data_dir, settings):
|
||||
u = uuid.uuid4()
|
||||
data_dir.add(u, b'\x00')
|
||||
return str(u)
|
||||
|
@ -4,6 +4,8 @@ import logging
|
||||
# external imports
|
||||
from chainlib.eth.address import to_checksum_address
|
||||
from hexathon import strip_0x
|
||||
from eth_accounts_index import AccountsIndex
|
||||
from eth_faucet import EthFaucet
|
||||
|
||||
# local imports
|
||||
from gas3.error import InvalidInput
|
||||
@ -13,10 +15,31 @@ from gas3.base import check
|
||||
logg = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def register_address(a):
|
||||
pass
|
||||
def register_address(settings, address):
|
||||
c = AccountsIndex(
|
||||
settings.get('CHAIN_SPEC'),
|
||||
signer=settings.get('SIGNER'),
|
||||
gas_oracle=settings.get('FEE_ORACLE'),
|
||||
nonce_oracle=settings.get('NONCE_ORACLE'),
|
||||
)
|
||||
(tx_hash, o) = c.add(settings.get('ACCOUNTS_CONTRACT'), settings.get('SENDER_ADDRESS'), address)
|
||||
r = settings.get('CONN').do(o)
|
||||
logg.debug('registry tx for {}: {}'.format(address, tx_hash))
|
||||
|
||||
def do_register(req, env, data_dir):
|
||||
c = EthFaucet(
|
||||
settings.get('CHAIN_SPEC'),
|
||||
signer=settings.get('SIGNER'),
|
||||
gas_oracle=settings.get('FEE_ORACLE'),
|
||||
nonce_oracle=settings.get('NONCE_ORACLE'),
|
||||
)
|
||||
(tx_hash, o) = c.give_to(settings.get('FAUCET_CONTRACT'), settings.get('SENDER_ADDRESS'), address)
|
||||
r = settings.get('CONN').do(o)
|
||||
logg.debug('faucet tx for {}: {}'.format(address, tx_hash))
|
||||
|
||||
return tx_hash
|
||||
|
||||
|
||||
def do_register(req, env, data_dir, settings):
|
||||
i = req.path.find('/', 1)
|
||||
if i == -1:
|
||||
raise InvalidInput(env.path)
|
||||
@ -36,4 +59,5 @@ def do_register(req, env, data_dir):
|
||||
raise InvalidInput('invalid address: ' + str(v))
|
||||
|
||||
data_dir.add(p, bytes.fromhex(v))
|
||||
return v
|
||||
tx_hash = register_address(settings, v)
|
||||
return tx_hash
|
||||
|
@ -1,2 +1,5 @@
|
||||
leveldir~=0.3.3rc1
|
||||
chainlib-eth~=0.5.2
|
||||
eth-contract-registry~=0.12.0rc1
|
||||
eth-accounts-index~=0.5.4rc1
|
||||
eth-faucet~=0.5.0rc1
|
||||
|
@ -54,6 +54,5 @@ class TestRegister(EthTesterCase):
|
||||
self.assertTrue(is_same_hex(r.hex(), self.accounts[0]))
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
Loading…
Reference in New Issue
Block a user