async def get_contract(request, contract): contract_code = client.raw_driver.get_contract(contract) if contract_code is None: return jsonResp({'error': '{} does not exist'.format(contract)}, status=404) return jsonResp({'name': contract, 'code': contract_code}, status=200)
async def lint_contract(request): code = request.json.get('code') if code is None: return jsonResp({'error': 'no code provided'}, status=500) violations = client.lint(request.json.get('code')) return jsonResp({'violations': violations}, status=200)
async def compile_contract(request): code = request.json.get('code') if code is None: return jsonResp({'error': 'no code provided'}, status=500) violations = client.lint(request.json.get('code')) if violations is None: compiled_code = client.compiler.parse_to_code(code) return jsonResp({'code': compiled_code}, status=200) return jsonResp({'violations': violations}, status=500)
async def get_variable(request, contract, variable): contract_code = client.raw_driver.get_contract(contract) if contract_code is None: return jsonResp({'error': '{} does not exist'.format(contract)}, status=404) key = request.args.get('key') if key is None: response = client.raw_driver.get('{}.{}'.format(contract, variable)) else: response = client.raw_driver.get('{}.{}:{}'.format( contract, variable, key)) if response is None: return jsonResp({'value': None}, status=404) else: return jsonResp({'value': response}, status=200)
async def get_methods(request, contract): contract_code = client.raw_driver.get_contract(contract) if contract_code is None: return jsonResp({'error': '{} does not exist'.format(contract)}, status=404) tree = ast.parse(contract_code) function_defs = [ n for n in ast.walk(tree) if isinstance(n, ast.FunctionDef) ] funcs = [] for definition in function_defs: func_name = definition.name kwargs = [arg.arg for arg in definition.args.args] funcs.append({'name': func_name, 'arguments': kwargs}) return jsonResp({'methods': funcs}, status=200)
async def mocktx(request): contract_name = request.json.get('contract') method_name = request.json.get('method') kwargs = json.loads(request.json.get('args')) sender = request.json.get('sender') client.signer = sender contract = client.get_contract(contract_name) method = getattr(contract, method_name) returnValue = method(**kwargs) return jsonResp({'return': returnValue or ''})
async def get_contracts(request): contracts = client.get_contracts() return jsonResp({'contracts': contracts})