def test_address(self): obj = RuntimeConfiguration().create_scale_object( 'Address', ScaleBytes("0xff1fa9d1bd1db014b65872ee20aee4fd4d3a942d95d3357f463ea6c799130b6318") ) obj.decode() self.assertEqual(obj.value, '1fa9d1bd1db014b65872ee20aee4fd4d3a942d95d3357f463ea6c799130b6318')
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)
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")
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())
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), "µ")
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 })
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())
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)
def test_vec_accountid(self): obj = RuntimeConfiguration().create_scale_object( 'Vec<AccountId>', ScaleBytes("0x0865d2273adeb04478658e183dc5edf41f1d86e42255442af62e72dbf1e6c0b97765d2273adeb04478658e183dc5edf41f1d86e42255442af62e72dbf1e6c0b977") ) obj.decode() self.assertListEqual(obj.value, [ '0x65d2273adeb04478658e183dc5edf41f1d86e42255442af62e72dbf1e6c0b977', '0x65d2273adeb04478658e183dc5edf41f1d86e42255442af62e72dbf1e6c0b977' ])
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)
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())
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)
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)
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')
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())
def test_dynamic_fixed_array_type_decode_u8(self): obj = RuntimeConfiguration().create_scale_object( '[u8; 65]', data=ScaleBytes( "0xc42b82d02bce3202f6a05d4b06d1ad46963d3be36fd0528bbe90e7f7a4e5fcd38d14234b1c9fcee920d76cfcf43b4ed5dd718e357c2bc1aae3a642975207e67f01" )) self.assertEqual( '0xc42b82d02bce3202f6a05d4b06d1ad46963d3be36fd0528bbe90e7f7a4e5fcd38d14234b1c9fcee920d76cfcf43b4ed5dd718e357c2bc1aae3a642975207e67f01', obj.decode())
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)
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)
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)
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}')
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)
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')
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)
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)
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)
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)
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())
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)
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)
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')