def process_encode(self, value): if type(value) == str: if len(value) <= 8: value = {"Index": ss58_decode_account_index(value)} else: value = {"Id": value} return super().process_encode(value)
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_multiaddress_ss58_index_as_str(self): obj = ScaleDecoder.get_decoder_class('Multiaddress') ss58_address = "F7Hs" index_id = ss58_decode_account_index(ss58_address) data = obj.encode(ss58_address) decode_obj = ScaleDecoder.get_decoder_class('Multiaddress', data=data) self.assertEqual(decode_obj.decode(), index_id)
def process_encode(self, value): if type(value) is int: value = {"Index": value} elif type(value) is str: if len(value) <= 8 and value[0:2] != '0x': value = {"Index": ss58_decode_account_index(value)} elif len(value) == 66: value = {"Id": value} elif len(value) == 42: value = {"Address20": value} elif value[0:2] != '0x': value = {"Id": f'0x{ss58_decode(value)}'} else: raise NotImplementedError("Address type not yet supported") return super().process_encode(value)
def process_encode(self, value): if type(value) == str and value[0:2] != '0x': # Assume SS58 encoding address if len(value) >= 46: from scalecodec.utils.ss58 import ss58_decode value = '0x{}'.format(ss58_decode(value)) else: from scalecodec.utils.ss58 import ss58_decode_account_index index_obj = GenericAccountIndex() value = index_obj.encode(ss58_decode_account_index(value)) if type(value) == str and value[0:2] == '0x' and len(value) == 66: # value is AccountId return ScaleBytes('0x{}'.format(value[2:])) elif type(value) == int: # value is AccountIndex raise NotImplementedError('Encoding of AccountIndex Adresses not supported yet') else: raise ValueError('Value is in unsupported format, expected 32 bytes hex-string for AccountIds or int for AccountIndex')
def test_decode_1_byte_account_index(self): self.assertEqual(1, ss58_decode_account_index('F7NZ'))
def test_decode_8_bytes_account_index(self): self.assertEqual(666666, ss58_decode_account_index('848Gh2GcGaZia'))
def test_decode_4_bytes_account_index(self): self.assertEqual(67305985, ss58_decode_account_index('zswfoZa'))
def test_decode_2_bytes_account_index(self): self.assertEqual(256, ss58_decode_account_index('3xygo'))