def redeem_voucher_check(user: User, voucher_user: VoucherUser, sc_address) -> Optional[str]:
    # require(voucher[msg.sender].length > _index); - invariant

    # require(v.used == false);
    if voucher_user.usedVoucher is not False:
        return "already used voucher"

    # require(v.expires_unixtime >= block.timestamp);
    if not voucher_user.expires_unixtime >= datetime.now():
        return "voucher is expired"

    if not WEB3.isAddress(sc_address):
        return "invalid sc_address"

    if user:
        pass

    return None
def voucher_constructor_check(institution_owner_address) -> Optional[str]:
    if not WEB3.isAddress(institution_owner_address):
        return "invalid public key"

    return None