コード例 #1
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)
コード例 #2
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)
コード例 #3
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)
コード例 #4
0
    def test_base_transaction_has_logs_bloom_after_revision_10(self):
        self._init_decentralized()

        # TEST: Before 'ADD_LOGS_BLOOM_ON_BASE_TX' revision, base transaction should not have logs bloom
        tx_list = [
            self._create_dummy_tx()
        ]

        prev_block, hash_list = self._make_and_req_block_for_issue_test(tx_list, is_block_editable=True)
        self._write_precommit_state(prev_block)
        base_tx_result: 'TransactionResult' = self.get_tx_results(hash_list)[0]

        expected_logs_bloom = None
        self.assertEqual(expected_logs_bloom, base_tx_result.logs_bloom)

        # TEST: After 'ADD_LOGS_BLOOM_ON_BASE_TX' revision, base transaction should have logs bloom
        self.set_revision(Revision.ADD_LOGS_BLOOM_ON_BASE_TX.value)
        tx_list = [
            self._create_dummy_tx()
        ]

        prev_block, hash_list = self._make_and_req_block_for_issue_test(tx_list, is_block_editable=True)
        self._write_precommit_state(prev_block)
        base_tx_result: 'TransactionResult' = self.get_tx_results(hash_list)[0]

        expected_logs_bloom = IconServiceEngine._generate_logs_bloom(base_tx_result.event_logs)
        self.assertEqual(expected_logs_bloom.value, base_tx_result.logs_bloom.value)
コード例 #5
0
    def test_call_event(self):
        context = ContextContainer._get_context()

        name = "name"
        address = Address.from_data(AddressPrefix.EOA, os.urandom(20))
        age = 10
        phone_number = "000"

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

        # This event has a indexed parameter,
        # so the list of indexed Should have 2 items
        self._mock_score.OneIndexEvent(name, address, age)
        self.assertEqual(len(context.event_logs), 2)
        event_log = context.event_logs[1]
        self.assertEqual(2, len(event_log.indexed))
        self.assertEqual(2, 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)

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

        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)
コード例 #6
0
    def test_call_event_mismatch_arg(self):
        context = ContextContainer._get_context()

        name = "name"
        address = Address.from_data(AddressPrefix.EOA, b'address')
        age = "10"
        # The hint of 'age' is int type but argument is str type

        self.assertRaises(ScoreErrorException, self._mock_score.OneIndexEvent,
                          name, address, age)

        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.assertNotIn(one_event_bloom_data, logs_bloom)

        name_bloom_data = int(1).to_bytes(
            1, DATA_BYTE_ORDER) + name.encode('utf-8')
        self.assertNotIn(name_bloom_data, logs_bloom)
コード例 #7
0
    def test_int_index_event(self):
        context = ContextContainer._get_context()

        amount = 123456789

        # Tests simple event emit
        self._mock_score.IntIndexEvent(amount)
        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)

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

        indexed_bloom_data = \
            int(1).to_bytes(1, DATA_BYTE_ORDER) + int_to_bytes(amount)
        self.assertIn(indexed_bloom_data, logs_bloom)
コード例 #8
0
    def test_bool_index_event(self):
        context = ContextContainer._get_context()

        yes_no = True

        # Tests simple event emit
        self._mock_score.BoolIndexEvent(yes_no)
        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)

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

        indexed_bloom_data = \
            int(1).to_bytes(1, DATA_BYTE_ORDER) + int_to_bytes(yes_no)
        self.assertIn(indexed_bloom_data, logs_bloom)
コード例 #9
0
    def test_address_index_event(self):
        context = ContextContainer._get_context()

        address = Address.from_data(AddressPrefix.EOA, b'address')

        # Tests simple event emit
        self._mock_score.AddressIndexEvent(address)
        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)

        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.body
        self.assertIn(indexed_bloom_data, logs_bloom)
コード例 #10
0
    def test_call_event_mismatch_arg(self):
        context = ContextContainer._get_context()

        name = "name"
        address = Address.from_data(AddressPrefix.EOA, os.urandom(20))
        age = "10"
        # The hint of 'age' is int type but argument is str type

        self.assertRaises(InvalidEventLogException,
                          self._mock_score.OneIndexEvent, name, address, age)

        logs_bloom = IconServiceEngine._generate_logs_bloom(context.event_logs)

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

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

        name_bloom_data = int(1).to_bytes(
            1, DATA_BYTE_ORDER) + name.encode('utf-8')
        self.assertNotIn(name_bloom_data, logs_bloom)