def __init__(self, bytecode: bytes, analyser: Analyser, entry_file: str): self._metadata = analyser.metadata self._symbols: Dict[str, ISymbol] = analyser.symbol_table import os self._files: List[str] = [analyser.path.replace(os.sep, '/')] self._nef: NefFile = NefFile(bytecode) self._entry_file = entry_file
def test_generate_nef_file(self): path = self.get_contract_path('GenerationWithDecorator.py') expected_nef_output = path.replace('.py', '.nef') Boa3.compile_and_save(path) self.assertTrue(os.path.exists(expected_nef_output)) with open(expected_nef_output, 'rb') as nef_output: magic = nef_output.read(constants.SIZE_OF_INT32) compiler_with_version = nef_output.read(64) compiler, version = compiler_with_version.rsplit(b'-', maxsplit=1) version = version[:32] nef_output.read(2) # reserved nef_output.read(1) # TODO: method tokens nef_output.read(2) # reserved script_size = nef_output.read(1) script = nef_output.read(int.from_bytes(script_size, BYTEORDER)) check_sum = nef_output.read(constants.SIZE_OF_INT32) self.assertEqual(int.from_bytes(script_size, BYTEORDER), len(script)) nef = NefFile(script)._nef self.assertEqual(compiler.decode(ENCODING), nef.compiler) self.assertEqual(check_sum, nef.checksum) self.assertEqual(version, nef.version.to_array())
def __init__(self, bytecode: bytes, analyser: Analyser, entry_file: str): import os self._metadata = analyser.metadata self._symbols: Dict[str, ISymbol] = analyser.symbol_table.copy() self._entry_file = entry_file self._entry_file_full_path = analyser.path.replace( os.sep, constants.PATH_SEPARATOR) self._files: List[str] = [self._entry_file_full_path] self._nef: NefFile = NefFile(bytecode) self.__all_imports: List[Import] = None self._all_methods: Dict[str, Method] = None self._all_static_vars: Dict[str, Variable] = None
def test_generate_nef_file(self): path = '%s/boa3_test/test_sc/generation_test/GenerationWithDecorator.py' % self.dirname expected_nef_output = path.replace('.py', '.nef') Boa3.compile_and_save(path) self.assertTrue(os.path.exists(expected_nef_output)) with open(expected_nef_output, 'rb') as nef_output: magic = nef_output.read(constants.SIZE_OF_INT32) compiler = nef_output.read(32) version = nef_output.read(16) hash = nef_output.read(constants.SIZE_OF_INT160) check_sum = nef_output.read(constants.SIZE_OF_INT32) script_size = nef_output.read(1) script = nef_output.read() self.assertEqual(int.from_bytes(script_size, BYTEORDER), len(script)) nef = NefFile(script)._nef self.assertEqual(compiler.decode(ENCODING), nef.compiler) self.assertEqual(hash, nef.script_hash.to_array()) self.assertEqual(check_sum, nef.checksum) self.assertEqual(version, nef.version.to_array())
def create_test_nef(self, test_script): nef = NefFile(test_script) nef._set_version(self.test_version) return nef