def setUp(self):
        self._score_root_path = self._SCORE_ROOT_PATH
        sys.path.append(self._score_root_path)

        IconScoreContext.engine = ContextEngine(
            icx=None,
            deploy=Mock(spec=DeployEngine),
            fee=None,
            iiss=None,
            prep=None,
            issue=None
        )
        IconScoreContext.storage = ContextStorage(
            icx=None,
            deploy=Mock(spec=DeployStorage),
            fee=None,
            iiss=None,
            prep=None,
            issue=None,
            rc=None,
            meta=None
        )

        self._context = IconScoreContext(IconScoreContextType.DIRECT)
        ContextContainer._push_context(self._context)
Exemple #2
0
    def setUp(self):
        self.db = self.create_db()
        self._factory = IconScoreContextFactory(max_size=1)
        self._context = self._factory.create(IconScoreContextType.DIRECT)

        ContextContainer._push_context(self._context)
        pass
    def setUp(self):
        self.context = Mock(spec=IconScoreContext)
        self.context.attach_mock(Mock(spec=Transaction), "tx")
        self.context.attach_mock(Mock(spec=Block), "block")
        self.context.attach_mock(Mock(spec=Message), "msg")

        ContextContainer._push_context(self.context)
    def setUp(self):
        db = Mock(spec=IconScoreDatabase)
        db.address = create_address(AddressPrefix.CONTRACT)
        context = IconScoreContext()
        traces = Mock(spec=list)

        context.tx = Mock(spec=Transaction)
        context.block = Mock(spec=Block)
        context.cumulative_step_used = Mock(spec=int)
        context.cumulative_step_used.attach_mock(Mock(), '__add__')
        context.step_counter = Mock(spec=IconScoreStepCounter)
        context.event_logs = Mock(spec=list)
        context.logs_bloom = Mock(spec=BloomFilter)
        context.traces = traces

        ContextContainer._push_context(context)
        context.icon_score_manager = Mock()
        context.icon_score_manager.get_owner = Mock(return_value=None)
        context.icon_score_manager.get_tx_hashes_by_score_address = \
            Mock(return_value=(create_tx_hash(), create_tx_hash()))
        context.internal_call = InternalCall(context)
        context.internal_call._other_score_call = Mock()
        context.internal_call.icx_engine = Mock(spec=IcxEngine)
        context.icon_score_mapper = Mock()
        context.icon_score_mapper.get_icon_score = Mock(
            return_value=TestScore(db))
        context.internal_call._validate_score_blacklist = Mock(
            return_value=False)
        self._score = TestScore(db)
    def setUp(self):
        db = Mock(spec=IconScoreDatabase)
        db.address = create_address(AddressPrefix.CONTRACT)
        context = IconScoreContext()
        context.icon_score_deploy_engine = Mock()
        traces = Mock(spec=list)

        context.tx = Mock(spec=Transaction)
        context.block = Mock(spec=Block)
        context.cumulative_step_used = Mock(spec=int)
        context.cumulative_step_used.attach_mock(Mock(), '__add__')
        context.step_counter = Mock(spec=IconScoreStepCounter)
        context.event_logs = []
        context.traces = traces
        context.tx_batch = TransactionBatch()

        ContextContainer._push_context(context)

        InternalCall._other_score_call = Mock()
        IconScoreContext.icx_engine = Mock(spec=IcxEngine)
        IconScoreContext.icon_score_deploy_engine = Mock(
            spec=IconScoreDeployEngine)

        context.icon_score_mapper = Mock()
        context.icon_score_mapper.get_icon_score = Mock(
            return_value=TestScore(db))
        self._score = TestScore(db)
Exemple #6
0
    def setUp(self):
        address = Address.from_data(AddressPrefix.CONTRACT, os.urandom(20))
        db = Mock(spec=IconScoreDatabase)
        db.attach_mock(address, 'address')
        context = IconScoreContext()
        traces = Mock(spec=list)
        step_counter = Mock(spec=IconScoreStepCounter)

        IconScoreContext.engine = ContextEngine(icx=Mock(IcxEngine),
                                                deploy=Mock(DeployEngine),
                                                fee=None,
                                                iiss=None,
                                                prep=None,
                                                issue=None)
        IconScoreContext.storage = ContextStorage(icx=Mock(IcxStorage),
                                                  deploy=Mock(DeployStorage),
                                                  fee=None,
                                                  iiss=None,
                                                  prep=None,
                                                  issue=None,
                                                  rc=None,
                                                  meta=None)

        IconScoreContext.icx_engine = Mock(spec=IcxEngine)
        context.type = IconScoreContextType.INVOKE
        context.func_type = IconScoreFuncType.WRITABLE
        context.tx_batch = TransactionBatch()
        context.event_logs = []
        context.traces = traces
        context.step_counter = step_counter
        context.get_owner = Mock()
        ContextContainer._push_context(context)

        self._mock_score = EventlogScore(db)
Exemple #7
0
    def setUp(self):
        self._score_root_path = self._SCORE_ROOT_PATH
        sys.path.append(self._score_root_path)

        IconScoreContext.icon_score_deploy_engine = Mock()
        self._context = IconScoreContext(IconScoreContextType.DIRECT)
        ContextContainer._push_context(self._context)
Exemple #8
0
 def intercept_query(*args, **kwargs):
     ContextContainer._push_context(args[0])
     context_db = self._inner_task._icon_service_engine._icx_context_db
     score = SampleScore(IconScoreDatabase(to_, context_db))
     ret = score.query_db()
     ContextContainer._pop_context()
     return ret
Exemple #9
0
    def setUp(self):
        self.db = self.create_db()
        self._context = IconScoreContext(IconScoreContextType.DIRECT)
        self._context.current_address = self.db.address

        ContextContainer._push_context(self._context)
        pass
    def setUp(self):
        self._score_path = self._ROOT_SCORE_PATH
        self._loader = IconScoreLoader(self._score_path)

        self._factory = IconScoreContextFactory(max_size=1)
        IconScoreContext.icon_score_deploy_engine = Mock()
        self._context = self._factory.create(IconScoreContextType.DIRECT)
        ContextContainer._push_context(self._context)
Exemple #11
0
    def setUp(self):
        IconScoreContext.icon_score_deploy_engine = Mock(spec=DeployEngine)
        self.context = Mock(spec=IconScoreContext)
        self.context.attach_mock(Mock(spec=Transaction), "tx")
        self.context.attach_mock(Mock(spec=Block), "block")
        self.context.attach_mock(Mock(spec=Message), "msg")

        ContextContainer._push_context(self.context)
Exemple #12
0
        def intercept_invoke(*args, **kwargs):
            ContextContainer._push_context(args[0])

            context_db = self._inner_task._icon_service_engine._icx_context_db
            score = SampleScore(IconScoreDatabase(to_, context_db))
            score.hash_readonly(data_to_hash)

            ContextContainer._pop_context()
Exemple #13
0
        def intercept_invoke(*args, **kwargs):
            ContextContainer._push_context(args[0])
            context_db = inner_task._icon_service_engine._icx_context_db

            score_address = create_address(AddressPrefix.CONTRACT, b'address')
            score = SampleScore(IconScoreDatabase(score_address, context_db))

            address = create_address(AddressPrefix.EOA, b'address')
            score.SampleEvent(b'i_data', address, 10, b'data', 'text')
Exemple #14
0
 def intercept_invoke(*args, **kwargs):
     ContextContainer._push_context(args[0])
     context_db = self._inner_task._icon_service_engine._icx_context_db
     ori_func = IconScoreContextUtil.get_owner
     IconScoreContextUtil.get_owner = Mock()
     score = SampleScore(IconScoreDatabase(to_, context_db))
     IconScoreContextUtil.get_owner = ori_func
     score.remove_db()
     ContextContainer._pop_context()
Exemple #15
0
    def tearDown(self):
        self._engine = None
        ContextContainer._pop_context()
        self._icon_score_mapper.close()
        self._factory.destroy(self._context)

        remove_path = os.path.join(TEST_ROOT_PATH, 'tests')
        IconScoreDeployer.remove_existing_score(remove_path)
        remove_path = os.path.join(TEST_ROOT_PATH, self._TEST_DB_PATH)
        IconScoreDeployer.remove_existing_score(remove_path)
        remove_path = os.path.join(
            TEST_ROOT_PATH, self.sample_token_address.to_bytes().hex())
        IconScoreDeployer.remove_existing_score(remove_path)
Exemple #16
0
    def make_context(self):
        self._tx_index += 1
        self._context = self._factory.create(IconScoreContextType.DIRECT)
        self._context.msg = Message(self.from_address, 0)

        tx_hash = create_tx_hash()
        self._context.new_icon_score_mapper = IconScoreMapper()
        self._context.tx = Transaction(tx_hash, origin=self.from_address)
        self._context.block = Block(1, create_block_hash(), 0, None)
        self._context.icon_score_mapper = self._icon_score_mapper
        self._context.icx = IcxEngine()
        self._context.icx.open(self._icx_storage)
        ContextContainer._push_context(self._context)
        self._context.validate_deployer = Mock()
        self._context.validate_score_blacklist = Mock()
Exemple #17
0
 def intercept_invoke(*args, **kwargs):
     ContextContainer._push_context(args[0])
     context_db = self._inner_task._icon_service_engine._icx_context_db
     address = create_address(AddressPrefix.EOA)
     score = SampleScore(IconScoreDatabase(address, context_db))
     i_data_param = b'i_data'
     data_param = b'data'
     text_param = 'text'
     score.SampleEvent(i_data_param, address, data_param, text_param)
     global event_log_data_size
     event_log_data_size = \
         len("SampleEvent(bytes,Address,bytes,str)".encode('utf-8')) + \
         len(i_data_param) + \
         len(address.body) + \
         len(data_param) + \
         len(text_param.encode('utf-8'))
Exemple #18
0
    def tearDown(self):
        self._engine = None
        ContextContainer._pop_context()
        self._icon_score_mapper.close()

        path = os.path.join(TEST_ROOT_PATH, 'tests')
        remove_path(path)
        path = os.path.join(TEST_ROOT_PATH, self._TEST_DB_PATH)
        remove_path(path)
        path = os.path.join(
            TEST_ROOT_PATH, self.sample_token_address.to_bytes().hex())
        remove_path(path)
        IconScoreContextUtil.validate_score_blacklist = VALIDATE_SCORE_BLACK_LIST
        IconScoreContextUtil.get_owner = GET_OWNER
        IconScoreContextUtil.get_icon_score = GET_ICON_SCORE
        IconScoreContextUtil.is_service_flag_on = IS_SERVICE_FLAG_ON
Exemple #19
0
    def test_call_event_kwarg(self):
        context = ContextContainer._get_context()

        name = "name"
        address = Address.from_data(AddressPrefix.EOA, b'address')
        age = 10

        # Call with ordered arguments
        self._mock_score.OneIndexEvent(name, address, age)
        self.assertEqual(len(context.event_logs), 1)
        event_log_ordered_args = context.event_logs[0]

        # Call with ordered arguments and keyword arguments
        self._mock_score.OneIndexEvent(name, age=age, address=address)
        self.assertEqual(len(context.event_logs), 2)
        event_log_keyword_args = context.event_logs[1]

        self.assertEqual(event_log_ordered_args.score_address,
                         event_log_keyword_args.score_address)
        self.assertEqual(event_log_ordered_args.indexed,
                         event_log_keyword_args.indexed)
        self.assertEqual(event_log_ordered_args.data,
                         event_log_keyword_args.data)

        logs_bloom = IconServiceEngine._generate_logs_bloom(context.event_logs)

        one_event_bloom_data = \
            int(0).to_bytes(1, DATA_BYTE_ORDER) + \
            'OneIndexEvent(str,Address,int)'.encode('utf-8')
        self.assertIn(one_event_bloom_data, logs_bloom)

        name_bloom_data = int(1).to_bytes(
            1, DATA_BYTE_ORDER) + name.encode('utf-8')
        self.assertIn(name_bloom_data, logs_bloom)
Exemple #20
0
    def test_bytes_index_event(self):
        context = ContextContainer._get_context()

        data = b'0123456789abc'

        # Tests simple event emit
        self._mock_score.BytesIndexEvent(data)
        self.assertEqual(len(context.event_logs), 1)
        event_log = context.event_logs[0]
        self.assertEqual(2, len(event_log.indexed))
        self.assertEqual(0, len(event_log.data))

        logs_bloom = IconServiceEngine._generate_logs_bloom(context.event_logs)

        # Asserts whether the SCORE address is included in the bloom
        self.assert_score_address_in_bloom(logs_bloom)

        event_bloom_data = \
            int(0).to_bytes(1, DATA_BYTE_ORDER) + \
            'BytesIndexEvent(bytes)'.encode('utf-8')
        self.assertIn(event_bloom_data, logs_bloom)

        indexed_bloom_data = \
            int(1).to_bytes(1, DATA_BYTE_ORDER) + data
        self.assertIn(indexed_bloom_data, logs_bloom)
Exemple #21
0
    def test_reserved_event_log(self):
        context = ContextContainer._get_context()
        context.func_type = IconScoreFuncType.READONLY

        address = Address.from_data(AddressPrefix.EOA, os.urandom(20))
        with self.assertRaises(InvalidEventLogException):
            self._mock_score.ICXTransfer(address, address, 0)
Exemple #22
0
    def test_address_index_event(self):
        context = ContextContainer._get_context()

        address = Address.from_data(AddressPrefix.EOA, os.urandom(20))

        # Tests simple event emit
        self._mock_score.AddressIndexEvent(address)
        self.assertEqual(1, len(context.event_logs))
        event_log = context.event_logs[0]
        self.assertEqual(2, len(event_log.indexed))
        self.assertEqual(0, len(event_log.data))

        logs_bloom = IconServiceEngine._generate_logs_bloom(context.event_logs)

        # Asserts whether the SCORE address is included in the bloom
        self.assert_score_address_in_bloom(logs_bloom)

        event_bloom_data = \
            int(0).to_bytes(1, DATA_BYTE_ORDER) + \
            'AddressIndexEvent(Address)'.encode('utf-8')
        self.assertIn(event_bloom_data, logs_bloom)

        indexed_bloom_data = int(1).to_bytes(1, DATA_BYTE_ORDER) + \
                             address.prefix.value.to_bytes(1, DATA_BYTE_ORDER) + address.body
        self.assertEqual(ICON_ADDRESS_BYTES_SIZE + 1, len(indexed_bloom_data))
        self.assertIn(indexed_bloom_data, logs_bloom)
Exemple #23
0
    def setUp(self):
        # The transaction in block 1000 of TestNet
        self.tx_v2 = {
            'from': 'hxdbc9f726ad776d9a43d5bad387eff01325178fa3',
            'to': 'hx0fb148785e4a5d77d16429c7ed2edae715a4453a',
            'value': '0x324e964b3eca80000',
            'fee': '0x2386f26fc10000',
            'timestamp': '1519709385120909',
            'tx_hash': '1257b9ea76e716b145463f0350f534f973399898a18a50d391e7d2815e72c950',
            'signature': 'WiRTA/tUNGVByc8fsZ7+U9BSDX4BcBuv2OpAuOLLbzUiCcovLPDuFE+PBaT8ovmz5wg+Bjr7rmKiu7Rl8v0DUQE=',
        }

        # The transaction in block 100000 of MainNet
        self.tx_v3 = {
            'version': '0x3',
            'nid': '0x1',
            'from': 'hx522bff55a62e0c75a1b51855b0802cfec6a92e84',
            'to': 'hx11de4e28be4845de3ea392fd8d758655bf766ca7',
            'value': '0x71afd498d0000',
            'stepLimit': '0xf4240',
            'timestamp': '0x57a4e5556cc03',
            'signature': 'fcEMXqEGlqEivXXr7YtD/F1RXgxSXF+R4gVrGKxT1zxi3HukX4NzkSl9/Es1G+nyZx+kviTAtQFUrA+/T0NrfAA=',
            'txHash': '6c71ac77b2d130a1f81d234e814974e85cabb0a3ec462c66ff3f820502d0ded2'
        }

        self.step_costs = {
            StepType.DEFAULT: 0,
            StepType.CONTRACT_CALL: 25_000,
            StepType.CONTRACT_CREATE: 1_000_000_000,
            StepType.CONTRACT_UPDATE: 1_600_000_000,
            StepType.CONTRACT_DESTRUCT: -70000,
            StepType.CONTRACT_SET: 30_000,
            StepType.GET: 0,
            StepType.SET: 320,
            StepType.REPLACE: 80,
            StepType.DELETE: -240,
            StepType.INPUT: 200,
            StepType.EVENT_LOG: 100,
            StepType.API_CALL: 10_000
        }
        self.step_limit = 1_000_000_000

        self._prep_engine = PRepEngine()

        self.context = self._create_context()
        ContextContainer._push_context(self.context)
Exemple #24
0
def _for_profile_function(range_cnt: int, _create_db_func: callable):
    db = _create_db_func(range_cnt)
    _context = IconScoreContext(IconScoreContextType.DIRECT)
    _context.current_address = db.address
    _context.revision = REVISION
    ContextContainer._push_context(_context)

    array_db = ArrayDB(ARRAY_DB, db, value_type=Address)

    for index in range(range_cnt):
        addr: 'Address' = create_address()
        array_db.put(addr)

    for i in range(range_cnt):
        a = array_db[i]

    ContextContainer._clear_context()
Exemple #25
0
    def setUp(self):
        address = Address.from_data(AddressPrefix.CONTRACT, b'address')
        db = Mock(spec=IconScoreDatabase)
        db.attach_mock(address, 'address')
        context = IconScoreContext()
        traces = Mock(spec=list)
        step_counter = Mock(spec=IconScoreStepCounter)

        context.type = IconScoreContextType.INVOKE
        context.func_type = IconScoreFuncType.WRITABLE
        context.tx_batch = TransactionBatch()
        context.event_logs = []
        context.traces = traces
        context.step_counter = step_counter
        context.get_owner = Mock()
        context.internal_call.icx_engine = Mock(spec=IcxEngine)
        ContextContainer._push_context(context)

        self._mock_score = EventlogScore(db)
Exemple #26
0
        def intercept_invoke(*args, **kwargs):
            args[0].revision = REVISION_3
            ContextContainer._push_context(args[0])

            context_db = self._inner_task._icon_service_engine._icx_context_db
            address = create_address(AddressPrefix.EOA)
            score = SampleScore(IconScoreDatabase(address, context_db))
            i_data_param = b'i_data'
            data_param = b'data'
            text_param = 'text'
            score.SampleEvent(i_data_param, address, data_param, text_param)
            global event_log_data_size
            event_log_data_size = \
                len("SampleEvent(bytes,Address,bytes,str)".encode('utf-8')) + \
                len(i_data_param) + \
                ICON_CONTRACT_ADDRESS_BYTES_SIZE + \
                len(data_param) + \
                len(text_param.encode('utf-8'))

            ContextContainer._pop_context()
 def test_send(self):
     context = ContextContainer._get_context()
     context.type = IconScoreContextType.INVOKE
     to_ = create_address(AddressPrefix.EOA)
     amount = 100
     self._score.icx.send(to_, amount)
     context.traces.append.assert_called()
     trace = context.traces.append.call_args[0][0]
     self.assertEqual(TraceType.CALL, trace.trace)
     self.assertEqual(to_, trace.data[0])
     self.assertEqual(amount, trace.data[3])
 def test_transfer(self):
     context = ContextContainer._get_context()
     context.type = IconScoreContextType.INVOKE
     to_ = create_address(AddressPrefix.EOA)
     context.internal_call.icx_engine = Mock(spec=IcxEngine)
     amount = 100
     self._score.icx.transfer(to_, amount)
     context.traces.append.assert_called()
     trace = context.traces.append.call_args[0][0]
     self.assertEqual(TraceType.CALL, trace.trace)
     self.assertEqual(to_, trace.data[0])
     self.assertEqual(amount, trace.data[3])
Exemple #29
0
    def test_icx_transfer_event(self):
        context = ContextContainer._get_context()

        address = Address.from_data(AddressPrefix.EOA, os.urandom(20))

        # Tests simple event emit
        self._mock_score.icx.send(address, 1)
        self.assertEqual(len(context.event_logs), 1)
        event_log = context.event_logs[0]
        self.assertEqual(4, len(event_log.indexed))
        self.assertEqual(ICX_TRANSFER_EVENT_LOG, event_log.indexed[0])
        self.assertEqual(0, len(event_log.data))
    def test_interface_call(self):
        context = ContextContainer._get_context()
        score_address = Mock(spec=Address)
        to_ = Mock(spec=Address)
        amount = 100

        self._score.test_interface_call(score_address, to_, amount)
        context.traces.append.assert_called()
        trace = context.traces.append.call_args[0][0]
        self.assertEqual(TraceType.CALL, trace.trace)
        self.assertEqual(score_address, trace.data[0])
        self.assertEqual('interfaceCall', trace.data[1])
        self.assertEqual(to_, trace.data[2][0])
        self.assertEqual(amount, trace.data[2][1])