Exemple #1
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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'))