def test_runtime_id_cache_lookup(self): runtime_config = RuntimeConfigurationObject() runtime_config.update_type_registry(load_type_registry_preset("default")) runtime_config.update_type_registry(load_type_registry_preset("kusama")) self.assertEqual(1023, runtime_config.get_runtime_id_from_upgrades(54248)) self.assertEqual(1020, runtime_config.get_runtime_id_from_upgrades(0))
def __init__(self): RuntimeConfiguration().update_type_registry( load_type_registry_preset('default')) if settings.TYPE_REGISTRY != 'default': RuntimeConfiguration().update_type_registry( load_type_registry_preset(settings.TYPE_REGISTRY)) super(AccountDetailResource, self).__init__()
def setUp(self) -> None: RuntimeConfiguration().clear_type_registry() RuntimeConfiguration().update_type_registry( load_type_registry_preset("default")) RuntimeConfiguration().update_type_registry( load_type_registry_preset("kusama")) RuntimeConfiguration().set_active_spec_version_id(1045)
def setUpClass(cls): RuntimeConfiguration().clear_type_registry() RuntimeConfiguration().update_type_registry(load_type_registry_preset("default")) RuntimeConfiguration().update_type_registry(load_type_registry_preset("kusama")) RuntimeConfiguration().set_active_spec_version_id(1045) cls.metadata_decoder = MetadataDecoder(ScaleBytes(metadata_v10_hex)) cls.metadata_decoder.decode()
def load_type_registry(self): runtime_config = RuntimeConfigurationObject() runtime_config.update_type_registry( load_type_registry_preset("metadata_types")) runtime_config.update_type_registry( load_type_registry_preset("default")) runtime_config.update_type_registry( load_type_registry_preset(self.chain)) self.runtime_config = runtime_config
def test_set_head(self): runtime_config = RuntimeConfigurationObject() runtime_config.update_type_registry(load_type_registry_preset("default")) runtime_config.update_type_registry(load_type_registry_preset("kusama")) self.assertIsNone(runtime_config.get_runtime_id_from_upgrades(99999999998)) # Set head to block runtime_config.set_runtime_upgrades_head(99999999999) # Check updated cache self.assertGreater(runtime_config.get_runtime_id_from_upgrades(99999999998), 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 = ScaleDecoder.get_decoder_class('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 = ScaleDecoder.get_decoder_class('BlockNumber', ScaleBytes("0x0000000000000001")) obj.decode() self.assertEqual(obj.value, 72057594037927936)
def test_compatibility_kusama_runtime(self): type_reg = load_type_registry_preset("kusama") runtime_data = self.kusama_substrate.rpc_request( 'state_getRuntimeVersion', []) self.assertLessEqual(runtime_data['result']['specVersion'], type_reg.get('runtime_id'), 'Current runtime is incompatible')
def setUpClass(cls): cls.runtime_config = RuntimeConfigurationObject() cls.runtime_config.update_type_registry(load_type_registry_preset("metadata_types")) module_path = os.path.dirname(__file__) cls.metadata_fixture_dict = load_type_registry_file( os.path.join(module_path, 'fixtures', 'metadata_hex.json') )
def test_enum_with_base_class(self): RuntimeConfiguration().update_type_registry(load_type_registry_preset("test")) obj = RuntimeConfiguration().create_scale_object('EnumWithoutBaseClass') self.assertFalse(isinstance(obj, GenericContractExecResult)) obj = RuntimeConfiguration().create_scale_object('EnumWithBaseClass') self.assertTrue(isinstance(obj, GenericContractExecResult))
def test_set_with_base_class(self): RuntimeConfiguration().update_type_registry(load_type_registry_preset("test")) obj = ScaleDecoder.get_decoder_class('SetWithoutBaseClass') self.assertFalse(isinstance(obj, GenericContractExecResult)) obj = ScaleDecoder.get_decoder_class('SetWithBaseClass') self.assertTrue(isinstance(obj, GenericContractExecResult))
def test_type_registry(self): # Example type SpecificTestType only define in type registry 'default' self.assertRaises(NotImplementedError, ScaleDecoder.get_decoder_class, 'SpecificTestType', ScaleBytes("0x01000000")) RuntimeConfiguration().update_type_registry(load_type_registry_preset("test")) obj = ScaleDecoder.get_decoder_class('SpecificTestType', ScaleBytes("0x06000000")) obj.decode() self.assertEqual(obj.value, 6)
def setUpClass(cls): RuntimeConfiguration().update_type_registry( load_type_registry_preset("default")) metadata_decoder = MetadataDecoder(ScaleBytes(metadata_v10_hex)) metadata_decoder.decode() cls.substrate = SubstrateInterface(url='dummy', address_type=2) cls.substrate.get_block_metadata = MagicMock( return_value=metadata_decoder)
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_parse_subtype(self): RuntimeConfiguration().update_type_registry(load_type_registry_preset("default")) obj = ScaleDecoder.get_decoder_class('(BalanceOf, Vec<(AccountId, Data)>)') self.assertEqual(obj.type_mapping[0][1].lower(), "BalanceOf".lower()) self.assertEqual(obj.type_mapping[1][1].lower(), "Vec<(AccountId, Data)>".lower()) obj = ScaleDecoder.get_decoder_class('Vec<UncleEntryItem<BlockNumber, Hash, AccountId>>') self.assertEqual(obj.sub_type, "UncleEntryItem<BlockNumber, Hash, AccountId>".lower())
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_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 setUpClass(cls): module_path = os.path.dirname(__file__) cls.metadata_fixture_dict = load_type_registry_file( os.path.join(module_path, 'fixtures', 'metadata_hex.json')) RuntimeConfiguration().update_type_registry( load_type_registry_preset("metadata_types")) cls.metadata_decoder = RuntimeConfiguration().create_scale_object( 'MetadataVersioned', data=ScaleBytes(cls.metadata_fixture_dict['V10'])) cls.metadata_decoder.decode()
def test_parse_subtype(self): RuntimeConfiguration().update_type_registry(load_type_registry_preset("default")) obj = RuntimeConfiguration().create_scale_object('(BalanceOf, Vec<(AccountId, Data)>)') self.assertEqual(obj.type_mapping[0], "BalanceOf") self.assertEqual(obj.type_mapping[1], "Vec<(AccountId, Data)>") obj = RuntimeConfiguration().create_scale_object('Vec<UncleEntryItem<BlockNumber, Hash, AccountId>>') self.assertEqual(obj.sub_type, "UncleEntryItem<BlockNumber, Hash, AccountId>")
def setUpClass(cls): module_path = os.path.dirname(__file__) cls.metadata_fixture_dict = load_type_registry_file( os.path.join(module_path, 'fixtures', 'metadata_hex.json') ) RuntimeConfiguration().update_type_registry(load_type_registry_preset("metadata_types")) cls.metadata_decoder = RuntimeConfiguration().create_scale_object( 'MetadataVersioned', data=ScaleBytes(cls.metadata_fixture_dict['V10']) ) cls.metadata_decoder.decode() cls.runtime_config_v14 = RuntimeConfigurationObject(implements_scale_info=True) cls.runtime_config_v14.update_type_registry(load_type_registry_preset("metadata_types")) cls.metadata_v14_obj = cls.runtime_config_v14.create_scale_object( "MetadataVersioned", data=ScaleBytes(cls.metadata_fixture_dict['V14']) ) cls.metadata_v14_obj.decode() cls.runtime_config_v14.add_portable_registry(cls.metadata_v14_obj)
def test_box_call(self): RuntimeConfiguration().update_type_registry(load_type_registry_preset("default")) scale_value = ScaleBytes("0x0400006e57561de4b4e63f0af8bf336008252a9597e5cdcb7622c72de4ff39731c5402070010a5d4e8") obj = ScaleDecoder.get_decoder_class('Box<Call>', scale_value, metadata=self.metadata_decoder) value = obj.decode() self.assertEqual(value['call_function'], 'transfer') self.assertEqual(value['call_module'], 'Balances') self.assertEqual(value['call_args'][0]['value'], '0x6e57561de4b4e63f0af8bf336008252a9597e5cdcb7622c72de4ff39731c5402') self.assertEqual(value['call_args'][1]['value'], 1000000000000)
def test_multiaddress_ss58_address_as_str_runtime_config(self): runtime_config = RuntimeConfigurationObject(ss58_format=2) runtime_config.update_type_registry(load_type_registry_preset("default")) obj = RuntimeConfiguration().create_scale_object('Multiaddress', runtime_config=runtime_config) ss58_address = "CdVuGwX71W4oRbXHsLuLQxNPns23rnSSiZwZPN4etWf6XYo" data = obj.encode(ss58_address) decode_obj = RuntimeConfiguration().create_scale_object('MultiAddress', data=data, runtime_config=runtime_config) self.assertEqual(decode_obj.decode(), ss58_address)
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_unknown_dynamic_type(self): RuntimeConfiguration().update_type_registry(load_type_registry_preset("default")) # Create set type with u32 self.assertRaises(NotImplementedError, RuntimeConfiguration().update_type_registry, { "types": { "UnknownType": { "type": "unknown", "value_a": "u32", "value_b": { "Value1": 1, "Value2": 2 } } } })
def test_dynamic_set(self): RuntimeConfiguration().update_type_registry(load_type_registry_preset("default")) obj = ScaleDecoder.get_decoder_class('WithdrawReasons', ScaleBytes("0x0100000000000000")) obj.decode() self.assertEqual(obj.value, ["TransactionPayment"]) obj = ScaleDecoder.get_decoder_class('WithdrawReasons', ScaleBytes("0x0300000000000000")) obj.decode() self.assertEqual(obj.value, ["TransactionPayment", "Transfer"]) obj = ScaleDecoder.get_decoder_class('WithdrawReasons', ScaleBytes("0x1600000000000000")) obj.decode() self.assertEqual(obj.value, ["Transfer", "Reserve", "Tip"])
def setUpClass(cls): module_path = os.path.dirname(__file__) # scale_info_defaults = load_type_registry_file(os.path.join(module_path, 'fixtures', 'scale_info_defaults.json')) cls.runtime_config = RuntimeConfigurationObject(ss58_format=42) cls.runtime_config.update_type_registry( load_type_registry_preset("metadata_types")) # cls.runtime_config.update_type_registry(scale_info_defaults) cls.metadata_fixture_dict = load_type_registry_file( os.path.join(module_path, 'fixtures', 'metadata_hex.json')) cls.metadata_obj = cls.runtime_config.create_scale_object( 'MetadataVersioned', data=ScaleBytes(cls.metadata_fixture_dict['V14'])) cls.metadata_obj.decode() cls.runtime_config.add_portable_registry(cls.metadata_obj)
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_set_value_type_u32(self): RuntimeConfiguration().update_type_registry( load_type_registry_preset("default")) # Create set type with u32 RuntimeConfiguration().update_type_registry({ "types": { "CustomU32Set": { "type": "set", "value_type": "u32", "value_list": { "Value1": 1, "Value2": 2, "Value3": 4, "Value4": 8, "Value5": 16 } } } }) obj = ScaleDecoder.get_decoder_class('CustomU32Set', ScaleBytes("0x0100000000000000")) self.assertRaises(RemainingScaleBytesNotEmptyException, obj.decode) obj = ScaleDecoder.get_decoder_class('CustomU32Set', ScaleBytes("0x01000000")) obj.decode() self.assertEqual(obj.value, ["Value1"]) obj = ScaleDecoder.get_decoder_class('CustomU32Set', ScaleBytes("0x03000000")) obj.decode() self.assertEqual(obj.value, ["Value1", "Value2"]) obj = ScaleDecoder.get_decoder_class('CustomU32Set', ScaleBytes("0x16000000")) obj.decode() self.assertEqual(obj.value, ["Value2", "Value3", "Value5"])
def setUpClass(cls): cls.runtime_config = RuntimeConfigurationObject() cls.runtime_config.clear_type_registry() cls.runtime_config.update_type_registry(load_type_registry_preset("metadata_types")) cls.runtime_config.update_type_registry(load_type_registry_preset("default"))
def tearDown(self) -> None: RuntimeConfiguration().clear_type_registry() RuntimeConfiguration().update_type_registry(load_type_registry_preset("default"))