<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def create(source_id: str, name: str, version: str, attrs: list, payment_handle: int):
 """ Creates a new schema object that is written to the ledger :param source_id: Institution's unique ID for the schema :param name: Name of schema :param version: Version of the schema :param attrs: Atttributes of the schema :param payment_handle: NYI - payment of ledger fee is taken from wallet automatically Example: source_id = 'foobar123' name = 'Address Schema' version = '1.0' attrs = ['address', 'city', 'state'] payment_handle = 0 schema = await Schema.create(source_id, name, version, attrs, payment_handle) :return: schema object, written to ledger """

        constructor_params = (source_id, name, version, attrs)

        c_source_id = c_char_p(source_id.encode('utf-8'))
        c_name = c_char_p(name.encode('utf-8'))
        c_version = c_char_p(version.encode('utf-8'))
        c_schema_data = c_char_p(json.dumps(attrs).encode('utf-8'))
        c_payment = c_uint32(payment_handle)
        c_params = (c_source_id, c_name, c_version, c_schema_data, c_payment)

        schema = await Schema._create("vcx_schema_create", constructor_params, c_params)
        schema.schema_id = await schema.get_schema_id()
        return schema