Esempio n. 1
0
    def test_multi_encode(self):

        as_multi = RuntimeConfiguration().create_scale_object("Call", metadata=self.metadata_decoder)

        as_multi.encode(
            {
                "call_module": "Multisig",
                "call_function": "as_multi",
                "call_args": {
                    "call": {
                        "call_module": "Balances",
                        "call_function": "transfer",
                        "call_args": {
                            "dest": "CofvaLbP3m8PLeNRQmLVPWmTT7jGgAXTwyT69k2wkfPxJ9V",
                            "value": 10000000000000
                        },
                    },
                    "maybe_timepoint": {"height": 3012294, "index": 3},
                    "other_signatories": sorted(['D2bHQwFcQj11SvtkjULEdKhK4WAeP6MThXgosMHjW9DrmbE',
                                                 'CofvaLbP3m8PLeNRQmLVPWmTT7jGgAXTwyT69k2wkfPxJ9V']),
                    "threshold": 2,
                    "store_call": True,
                    "max_weight": 10,
                },
            }
        )
        self.assertEqual(str(as_multi.data), "0x1f010200080a2ee2acc37fa96e818e2817afc104ce55770bcccb7333bbf8481d5bc3c6fa4614097421065c7bb0efc6770ffc5d604654159d45910cc7a3cb602be16acc552801c6f62d0003000000a80400000a2ee2acc37fa96e818e2817afc104ce55770bcccb7333bbf8481d5bc3c6fa460b00a0724e1809010a00000000000000")
Esempio n. 2
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")
    def test_bounded_vec_encode(self):
        obj = RuntimeConfiguration().create_scale_object('BoundedVec<Hash, maxproposals>')
        value = obj.encode(['0xe1781813275653a970b4260298b3858b36d38e072256dad674f7c786a0cae236'])
        self.assertEqual(str(value), '0x04e1781813275653a970b4260298b3858b36d38e072256dad674f7c786a0cae236')

        obj = RuntimeConfiguration().create_scale_object('BoundedVec<Option<RegistrarInfo<BalanceOf, AccountId>>,5>')
        self.assertEqual(obj.sub_type, 'Option<RegistrarInfo<BalanceOf, AccountId>>')

        value = obj.encode([None, None])
        self.assertEqual(str(value), '0x080000')
    def test_era_methods(self):
        obj = RuntimeConfiguration().create_scale_object('Era')
        obj.encode('00')
        self.assertTrue(obj.is_immortal())
        self.assertEqual(obj.birth(1400), 0)
        self.assertEqual(obj.death(1400), 2**64 - 1)

        obj = RuntimeConfiguration().create_scale_object('Era')
        obj.encode((256, 120))
        self.assertFalse(obj.is_immortal())
        self.assertEqual(obj.birth(1400), 1400)
        self.assertEqual(obj.birth(1410), 1400)
        self.assertEqual(obj.birth(1399), 1144)
        self.assertEqual(obj.death(1400), 1656)
Esempio n. 5
0
def ss58_encode_account_index(account_index: int,
                              ss58_format: int = 42) -> str:
    """
    Encodes an AccountIndex to an Substrate address according to provided address_type

    Parameters
    ----------
    account_index
    ss58_format

    Returns
    -------

    """

    if 0 <= account_index <= 2**8 - 1:
        account_idx_encoder = RuntimeConfiguration().create_scale_object('u8')
    elif 2**8 <= account_index <= 2**16 - 1:
        account_idx_encoder = RuntimeConfiguration().create_scale_object('u16')
    elif 2**16 <= account_index <= 2**32 - 1:
        account_idx_encoder = RuntimeConfiguration().create_scale_object('u32')
    elif 2**32 <= account_index <= 2**64 - 1:
        account_idx_encoder = RuntimeConfiguration().create_scale_object('u64')
    else:
        raise ValueError("Value too large for an account index")

    return ss58_encode(
        account_idx_encoder.encode(account_index).data, ss58_format)
Esempio n. 6
0
    def test_bytes_encode_list_of_u8(self):
        value = [84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 116, 101, 115, 116]

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

        self.assertEqual("0x385468697320697320612074657374", data.to_hex())
    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')
Esempio n. 8
0
    def test_bytes_encode_bytearray(self):
        value = bytearray(b'This is a test')

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

        self.assertEqual("0x385468697320697320612074657374", data.to_hex())
 def test_hashmap_encode(self):
     obj = RuntimeConfiguration().create_scale_object(
         'HashMap<Vec<u8>, u32>')
     data = obj.encode([('1', 2), ('23', 24), ('28', 30), ('45', 80)])
     self.assertEqual(
         data.to_hex(),
         '0x10043102000000083233180000000832381e00000008343550000000')
Esempio n. 10
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), "µ")
Esempio n. 11
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())
Esempio n. 12
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)
Esempio n. 13
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)
Esempio n. 14
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)
Esempio n. 15
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)
Esempio n. 16
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)
Esempio n. 17
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)
Esempio n. 18
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)
Esempio n. 19
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}')
Esempio n. 20
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')
Esempio n. 21
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())
Esempio n. 22
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)
Esempio n. 23
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)
Esempio n. 24
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)
Esempio n. 25
0
    def test_compact_balance_encode_decode(self):
        scale_data = ScaleBytes('0x070010a5d4e8')
        value = 1000000000000

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

        self.assertEqual(str(scale_data), str(data))

        obj_check = RuntimeConfiguration().create_scale_object('Compact<Balance>', data)

        self.assertEqual(obj_check.decode(), value)
Esempio n. 26
0
    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)
Esempio n. 27
0
    def test_era_mortal_encode_dict(self):
        obj = RuntimeConfiguration().create_scale_object('Era')
        obj.encode({'period': 32768, 'phase': 20000})
        self.assertEqual(str(obj.data), '0x4e9c')

        obj = RuntimeConfiguration().create_scale_object('Era')
        obj.encode({'period': 32768, 'current': (32768 * 3) + 20000})
        self.assertEqual(str(obj.data), '0x4e9c')

        obj = RuntimeConfiguration().create_scale_object('Era')
        obj.encode({'period': 200, 'current': 1400})
        obj2 = RuntimeConfiguration().create_scale_object('Era')
        obj2.encode((256, 120))
        self.assertEqual(str(obj.data), str(obj2.data))
Esempio n. 28
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)
Esempio n. 29
0
    def test_struct_encode_decode(self):

        value = {'unstake_threshold': 3, 'validator_payment': 0}
        scale_data = ScaleBytes("0x0c00")

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

        self.assertEqual(str(scale_data), str(data))

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

        self.assertEqual(obj_check.decode(), value)
Esempio n. 30
0
    def test_vec_accountid_encode_decode(self):

        value = [
            '0x0034d9d2dcdcd79451d95fd019a056d47dfa9926d762b94e63f06391b1545aee',
            '0x2ce1929ab903f695bdeeeb79a588774d71468362129136f1b7f7b31a32958f98',
            '0x88c47944e4aaf9d53a9627400f9a948bb5f355bda38702dbdeda0c5d34553128',
        ]

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

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

        self.assertEqual(obj.decode(), value)