예제 #1
0
 def test_address(self):
     obj = RuntimeConfiguration().create_scale_object(
         'Address',
         ScaleBytes("0xff1fa9d1bd1db014b65872ee20aee4fd4d3a942d95d3357f463ea6c799130b6318")
     )
     obj.decode()
     self.assertEqual(obj.value, '1fa9d1bd1db014b65872ee20aee4fd4d3a942d95d3357f463ea6c799130b6318')
예제 #2
0
 def test_era_immortal(self):
     obj = RuntimeConfiguration().create_scale_object(
         'Era', ScaleBytes('0x00'))
     obj.decode()
     self.assertEqual(obj.value, '00')
     self.assertIsNone(obj.period)
     self.assertIsNone(obj.phase)
예제 #3
0
    def test_compact_u32_2bytes(self):
        obj = RuntimeConfiguration().create_scale_object('Compact<u32>', ScaleBytes("0x18"))
        obj.decode()

        obj = RuntimeConfiguration().create_scale_object('Compact<u32>')
        obj.encode(6000)
        self.assertEqual(str(obj.data), "0xc15d")
예제 #4
0
    def test_string(self):
        obj = RuntimeConfiguration().create_scale_object('String', ScaleBytes("0x1054657374"))
        obj.decode()
        self.assertEqual(str(obj), "Test")

        data = obj.encode("Test")

        self.assertEqual("0x1054657374", data.to_hex())
예제 #5
0
    def test_string_multibyte_chars(self):
        obj = RuntimeConfiguration().create_scale_object('String')

        data = obj.encode('µ')
        self.assertEqual('0x08c2b5', data.to_hex())

        obj.decode()
        self.assertEqual(str(obj), "µ")
예제 #6
0
 def test_validatorprefs_struct(self):
     obj = RuntimeConfiguration().create_scale_object(
         'ValidatorPrefsTo145', ScaleBytes("0x0c00"))
     obj.decode()
     self.assertEqual(obj.value, {
         'unstake_threshold': 3,
         'validator_payment': 0
     })
예제 #7
0
    def test_dynamic_fixed_array_type_decode(self):
        obj = RuntimeConfiguration().create_scale_object('[u32; 1]', data=ScaleBytes("0x01000000"))
        self.assertEqual([1], obj.decode())

        obj = RuntimeConfiguration().create_scale_object('[u32; 3]', data=ScaleBytes("0x010000000200000003000000"))
        self.assertEqual([1, 2, 3], obj.decode())

        obj = RuntimeConfiguration().create_scale_object('[u32; 0]', data=ScaleBytes(bytes()))
        self.assertEqual([], obj.decode())
예제 #8
0
    def test_type_registry(self):
        # Example type SpecificTestType only define in type registry 'default'
        self.assertRaises(NotImplementedError, RuntimeConfiguration().create_scale_object, 'SpecificTestType', ScaleBytes("0x01000000"))

        RuntimeConfiguration().update_type_registry(load_type_registry_preset("test"))

        obj = RuntimeConfiguration().create_scale_object('SpecificTestType', ScaleBytes("0x06000000"))
        obj.decode()
        self.assertEqual(obj.value, 6)
예제 #9
0
 def test_vec_accountid(self):
     obj = RuntimeConfiguration().create_scale_object(
         'Vec<AccountId>',
         ScaleBytes("0x0865d2273adeb04478658e183dc5edf41f1d86e42255442af62e72dbf1e6c0b97765d2273adeb04478658e183dc5edf41f1d86e42255442af62e72dbf1e6c0b977")
     )
     obj.decode()
     self.assertListEqual(obj.value, [
         '0x65d2273adeb04478658e183dc5edf41f1d86e42255442af62e72dbf1e6c0b977',
         '0x65d2273adeb04478658e183dc5edf41f1d86e42255442af62e72dbf1e6c0b977'
     ])
예제 #10
0
    def test_data_encode_decode(self):

        value = {"Raw": "Test"}

        obj = RuntimeConfiguration().create_scale_object('Data')
        scale_data = obj.encode(value)

        obj = RuntimeConfiguration().create_scale_object('Data', scale_data)
        obj.decode()

        self.assertEqual(obj.value, value)
예제 #11
0
    def test_bounded_vec_decode(self):
        obj = RuntimeConfiguration().create_scale_object(
            'BoundedVec<Hash, maxproposals>',
            data=ScaleBytes('0x04e1781813275653a970b4260298b3858b36d38e072256dad674f7c786a0cae236')
        )
        self.assertEqual(obj.decode(), ['0xe1781813275653a970b4260298b3858b36d38e072256dad674f7c786a0cae236'])

        obj = RuntimeConfiguration().create_scale_object(
            'BoundedVec<Option<RegistrarInfo<BalanceOf, AccountId>>,5>', data=ScaleBytes('0x080000')
        )
        self.assertEqual([None, None], obj.decode())
예제 #12
0
    def test_set_encode_decode(self):

        RuntimeConfiguration().update_type_registry(load_type_registry_preset("test"))

        value = ['Display', 'Legal', 'Email', 'Twitter']

        obj = RuntimeConfiguration().create_scale_object('IdentityFields')
        scale_data = obj.encode(value)

        obj = RuntimeConfiguration().create_scale_object('IdentityFields', scale_data)
        obj.decode()

        self.assertEqual(obj.value, value)
예제 #13
0
    def test_type_registry_overloading(self):
        # Type BlockNumber defined as U32 in type registry 'kusama'
        RuntimeConfiguration().update_type_registry(load_type_registry_preset("kusama"))

        obj = RuntimeConfiguration().create_scale_object('BlockNumber', ScaleBytes("0x0000000000000001"))
        self.assertRaises(RemainingScaleBytesNotEmptyException, obj.decode)

        # Type BlockNumber changed to U64 in type registry 'test'
        RuntimeConfiguration().update_type_registry(load_type_registry_preset("test"))

        obj = RuntimeConfiguration().create_scale_object('BlockNumber', ScaleBytes("0x0000000000000001"))
        obj.decode()
        self.assertEqual(obj.value, 72057594037927936)
예제 #14
0
    def test_opaque_call(self):

        opaque_call_obj = RuntimeConfiguration().create_scale_object(
            'OpaqueCall', metadata=self.metadata_decoder)

        call_value = {
            'call_module': 'System',
            'call_function': 'remark',
            'call_args': {
                '_remark': '0x0123456789'
            }
        }

        scale_data = opaque_call_obj.encode(call_value)

        self.assertEqual(str(scale_data), '0x200001140123456789')

        opaque_call_obj = RuntimeConfiguration().create_scale_object(
            'OpaqueCall', data=scale_data, metadata=self.metadata_decoder)

        value = opaque_call_obj.decode()

        self.assertEqual(value['call_function'], 'remark')
        self.assertEqual(value['call_module'], 'System')
        self.assertEqual(value['call_args'][0]['value'], '0x0123456789')
        self.assertEqual(value['call_args'][0]['name'], '_remark')
예제 #15
0
 def test_hashmap_decode(self):
     obj = RuntimeConfiguration().create_scale_object(
         'HashMap<Vec<u8>, u32>',
         data=ScaleBytes(
             "0x10043102000000083233180000000832381e00000008343550000000"))
     self.assertEqual([('1', 2), ('23', 24), ('28', 30), ('45', 80)],
                      obj.decode())
예제 #16
0
 def test_dynamic_fixed_array_type_decode_u8(self):
     obj = RuntimeConfiguration().create_scale_object(
         '[u8; 65]',
         data=ScaleBytes(
             "0xc42b82d02bce3202f6a05d4b06d1ad46963d3be36fd0528bbe90e7f7a4e5fcd38d14234b1c9fcee920d76cfcf43b4ed5dd718e357c2bc1aae3a642975207e67f01"
         ))
     self.assertEqual(
         '0xc42b82d02bce3202f6a05d4b06d1ad46963d3be36fd0528bbe90e7f7a4e5fcd38d14234b1c9fcee920d76cfcf43b4ed5dd718e357c2bc1aae3a642975207e67f01',
         obj.decode())
예제 #17
0
    def test_option_bytes_encode_decode(self):
        value = "Test"

        obj = RuntimeConfiguration().create_scale_object('Option<Bytes>')
        data = obj.encode(value)

        obj_check = RuntimeConfiguration().create_scale_object('Option<Bytes>', data)

        self.assertEqual(obj_check.decode(), value)
예제 #18
0
    def test_accountid_encode_decode(self):
        value = '0x586cb27c291c813ce74e86a60dad270609abf2fc8bee107e44a80ac00225c409'

        obj = RuntimeConfiguration().create_scale_object('AccountId')
        data = obj.encode(value)

        obj_check = RuntimeConfiguration().create_scale_object('AccountId', data)

        self.assertEqual(obj_check.decode(), value)
예제 #19
0
    def test_account_id_runtime_config(self):

        ss58_address = "CdVuGwX71W4oRbXHsLuLQxNPns23rnSSiZwZPN4etWf6XYo"
        public_key = '0x' + ss58_decode(ss58_address)

        runtime_config = RuntimeConfigurationObject(ss58_format=2)
        runtime_config.update_type_registry(load_type_registry_preset("default"))

        # Encode
        obj = RuntimeConfiguration().create_scale_object('AccountId', runtime_config=runtime_config)
        data = obj.encode(ss58_address)

        # Decode
        decode_obj = RuntimeConfiguration().create_scale_object('AccountId', data=data, runtime_config=runtime_config)
        decode_obj.decode()

        self.assertEqual(decode_obj.value, ss58_address)
        self.assertEqual(decode_obj.ss58_address, ss58_address)
        self.assertEqual(decode_obj.public_key, public_key)
예제 #20
0
    def test_multiaddress_ss58_address_as_str(self):
        obj = RuntimeConfiguration().create_scale_object('Multiaddress')
        ss58_address = "CdVuGwX71W4oRbXHsLuLQxNPns23rnSSiZwZPN4etWf6XYo"

        public_key = ss58_decode(ss58_address)

        data = obj.encode(ss58_address)
        decode_obj = RuntimeConfiguration().create_scale_object('MultiAddress', data=data)

        self.assertEqual(decode_obj.decode(), f'0x{public_key}')
예제 #21
0
    def test_multiaddress_ss58_index_as_str(self):
        obj = RuntimeConfiguration().create_scale_object('MultiAddress')
        ss58_address = "F7Hs"

        index_id = ss58_decode_account_index(ss58_address)

        data = obj.encode(ss58_address)
        decode_obj = RuntimeConfiguration().create_scale_object('MultiAddress', data=data)

        self.assertEqual(decode_obj.decode(), index_id)
예제 #22
0
    def test_enum_encode_decode(self):

        value = {'Staked': None}

        obj = RuntimeConfiguration().create_scale_object('RewardDestination')
        data = obj.encode(value)

        obj_check = RuntimeConfiguration().create_scale_object('RewardDestination', data)

        self.assertEqual(obj_check.decode(), 'Staked')
예제 #23
0
    def test_hexbytes_encode_decode(self):

        value = '0x5468697320697320612074657374'

        obj = RuntimeConfiguration().create_scale_object('HexBytes')
        data = obj.encode(value)

        obj_check = RuntimeConfiguration().create_scale_object('HexBytes', data)

        self.assertEqual(obj_check.decode(), value)
예제 #24
0
    def test_bytes_encode_decode(self):

        value = 'This is a test'

        obj = RuntimeConfiguration().create_scale_object('Bytes')
        data = obj.encode(value)

        obj_check = RuntimeConfiguration().create_scale_object('Bytes', data)

        self.assertEqual(obj_check.decode(), value)
예제 #25
0
    def test_vec_string_encode_decode(self):

        value = ['test', 'vec']

        obj = RuntimeConfiguration().create_scale_object('Vec<Bytes>')
        data = obj.encode(value)

        obj = RuntimeConfiguration().create_scale_object('Vec<Bytes>', data)

        self.assertEqual(obj.decode(), value)
예제 #26
0
    def test_compact_u32_encode_decode(self):

        value = 2000001

        obj = RuntimeConfiguration().create_scale_object('Compact<u32>')
        data = obj.encode(value)

        obj = CompactU32(data)

        self.assertEqual(obj.decode(), value)
예제 #27
0
    def test_enum_with_specified_index_number(self):
        RuntimeConfiguration().update_type_registry(load_type_registry_preset("test"))

        obj = RuntimeConfiguration().create_scale_object('EnumSpecifiedIndex')

        data = obj.encode("KSM")
        self.assertEqual("0x82", data.to_hex())

        obj = RuntimeConfiguration().create_scale_object('EnumSpecifiedIndex', data=ScaleBytes("0x80"))

        self.assertEqual("KAR", obj.decode())
예제 #28
0
    def test_enum_type_mapping_empty_value_encode_decode(self):
        RuntimeConfiguration().update_type_registry(load_type_registry_preset("test"))

        value = "Error"

        obj = RuntimeConfiguration().create_scale_object('EnumWithoutBaseClass')
        data = obj.encode(value)

        obj_check = RuntimeConfiguration().create_scale_object('EnumWithoutBaseClass', data)

        self.assertEqual(obj_check.decode(), value)
예제 #29
0
    def test_enum_type_mapping_encode_decode(self):
        RuntimeConfiguration().update_type_registry(load_type_registry_preset("test"))

        value = {"AuthoritiesChange": ["0x586cb27c291c813ce74e86a60dad270609abf2fc8bee107e44a80ac00225c409"]}

        obj = RuntimeConfiguration().create_scale_object('DigestItem')
        data = obj.encode(value)

        obj_check = RuntimeConfiguration().create_scale_object('DigestItem', data)

        self.assertEqual(obj_check.decode(), value)
예제 #30
0
    def test_proposal_encode_decode(self):

        value = {
            'call_module': 'System',
            'call_function': 'remark',
            'call_args': {
                '_remark': '0x0123456789'
            }
        }

        obj = RuntimeConfiguration().create_scale_object('Box<Proposal>', metadata=self.metadata_decoder)
        data = obj.encode(value)

        obj_check = RuntimeConfiguration().create_scale_object('Box<Proposal>', data, metadata=self.metadata_decoder)

        obj_check.decode()

        self.assertEqual(obj_check.value['call_module'], 'System')
        self.assertEqual(obj_check.value['call_function'], 'remark')
        self.assertEqual(obj_check.value['call_args'][0]['value'], '0x0123456789')