Пример #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")
Пример #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")
Пример #3
0
    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')
Пример #4
0
    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)
Пример #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)
Пример #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())
Пример #7
0
    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')
Пример #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())
Пример #9
0
 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')
Пример #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), "µ")
Пример #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())
Пример #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)
Пример #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)
Пример #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)
Пример #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)
Пример #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)
Пример #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)
Пример #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)
Пример #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}')
Пример #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')
Пример #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())
Пример #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)
Пример #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)
Пример #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)
Пример #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)
Пример #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)
Пример #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))
Пример #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)
Пример #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)
Пример #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)