Esempio n. 1
0
def signup(username, password) -> Tuple[Audit, Signer_Impl]:
    try:
        signer = create_account(username, password)
        audit = Audit(username=username, password=password)

        audit.account_addr = str(signer.keypair.address)
        audit.account_pub = str(signer.keypair.public_key)
        audit.account_priv = str(signer.keypair.private_key)

        privkey, pubkey = gen_rsakey()
        audit.envelope_pub = pubkey
        audit.envelope_priv = privkey

        managementAddr = db.session.query(Contracts).filter(
            Contracts.name == "Management").first().addr

        call_contract(managementAddr,
                      "Management",
                      "addAudit",
                      args=[
                          username,
                          to_checksum_address(audit.account_addr),
                          audit.envelope_pub, ""
                      ],
                      signer=signer)

        db.session.add(audit)
        db.session.commit()
    except Exception:
        traceback.print_exc()
        db.session.rollback()
        return None, None
    return audit, signer
Esempio n. 2
0
def signup(username, password) -> Tuple[Enterprise, Signer_Impl]:
    try:
        signer = create_account(username, password)

        enterprise = Enterprise(username=username, password=password)

        contract_addr = deploy_contract("Enterprise", signer=signer)
        enterprise.contract_addr = contract_addr
        enterprise.account_addr = str(signer.keypair.address)
        enterprise.account_pub = str(signer.keypair.public_key)
        enterprise.account_priv = str(signer.keypair.private_key)

        privkey, pubkey = gen_rsakey()
        enterprise.envelope_pub = pubkey
        enterprise.envelope_priv = privkey

        managementAddr = db.session.query(Contracts).filter(
            Contracts.name == "Management").first().addr
        call_contract(managementAddr,
                      "Management",
                      "addEnterprise",
                      args=[
                          username,
                          to_checksum_address(enterprise.account_addr),
                          to_checksum_address(enterprise.contract_addr),
                          enterprise.envelope_pub, ""
                      ])

        db.session.add(enterprise)
        db.session.commit()
    except Exception:
        traceback.print_exc()
        db.session.rollback()
        return None, None
    return enterprise, signer
Esempio n. 3
0
def add_engineer():
    username = session.get("username", "")
    password = session.get("password", "")
    agency, signer = login(username, password)

    if agency is None:
        return redirect("/agency")

    if request.method == "GET":
        return render_template("agency2-1.html", is_login = True, agency = agency, username = username)

    ename = request.form.get("name")
    eid = request.form.get("id", "")
    efield = request.form.get("field", "")

    if ename is None:
        return render_template("agency2-1.html", is_login = True, agency = agency, username = username, fail_msg = "名称不能为空")

    try:
        EngineerListAddr = db.session.query(Contracts).filter(Contracts.name == "EngineerList").first().addr

        engineer = Engineer(username = ename, eid= eid, field= efield)
        call_contract(EngineerListAddr, "EngineerList", "addEngineer", args = [ename, eid, efield, "", agency.username], signer= signer)
        agency.engineers.append(engineer)

        db.session.add(engineer)
        db.session.add(agency)
        db.session.commit()
    except Exception:
        traceback.print_exc()
        return render_template("agency2-1.html", is_login = True, agency = agency, username = username, fail_msg = "添加失败")
    return render_template("agency2-1.html", is_login = True, agency = agency, username = username, succ_msg = "添加成功")
Esempio n. 4
0
def audit_revoke():
    username = session.get("username", "")
    password = session.get("password", "")
    audit, signer = login(username, password)

    if audit is None:
        return redirect("/audit")

    if request.method == "GET":
        return render_template("audit2-1.html",
                               is_login=True,
                               audit=audit,
                               username=username)

    license_addr = request.form.get("license-addr", None)
    try:
        if license_addr is not None or license_addr != "":
            call_contract(license_addr, "License", "revokeLicense", args=[])
    except Exception:
        traceback.print_exc()
        return render_template("audit2-1.html",
                               is_login=True,
                               fail_msg="撤销失败",
                               audit=audit,
                               username=username)
    return render_template("audit2-1.html",
                           is_login=True,
                           succ_msg="撤销成功",
                           audit=audit,
                           username=username)
Esempio n. 5
0
def enterprise_evaluation():
    username = session.get("username", "")
    password = session.get("password", "")

    enterprise, signer = login(username, password)
    if enterprise is None:
        return redirect("/enterprise")

    evaluation_addr = enterprise.evaluation_addr
    _, al, _, _ = count_numbers()
    if al < 3:
        return render_template("enterprise2.html",
                               is_login=True,
                               fail_msg="缺少足够的安评机构参与(至少3家安评机构)",
                               enterprise=enterprise,
                               username=username)
    if evaluation_addr is None:
        return render_template("enterprise2.html",
                               is_login=True,
                               fail_msg="缺少审查合约地址",
                               enterprise=enterprise,
                               username=username)

    try:
        managementAddr = db.session.query(Contracts).filter(
            Contracts.name == "Management").first().addr

        call_contract(evaluation_addr,
                      "ReportEvaluation",
                      "getAgencyList",
                      args=[to_checksum_address(managementAddr)])

        res = call_contract(evaluation_addr,
                            "ReportEvaluation",
                            "startEvaluation",
                            signer=signer)
        ea_addr_list: List[str] = list(res[0])
    except Exception:
        traceback.print_exc()
        return render_template("enterprise2.html",
                               is_login=True,
                               fail_msg="合约调用失败",
                               enterprise=enterprise,
                               username=username)

    result = []
    for addr in ea_addr_list:
        ag = Agency.query.filter(Agency.contract_addr == addr).first()
        if ag is not None:
            result.append(
                (ag.username, addr, str(ag.envelope_pub, encoding="utf-8")))
    # audit = random.choice(list(AuditList.values()))
    # result.append((audit.username, ""))
    return render_template("evaluation2.html",
                           evaluation_addr=evaluation_addr,
                           result=result)
Esempio n. 6
0
def public_arbitrate(arbitrate_addr: str):
    username = session.get("username", "")
    password = session.get("password", "")
    audit, signer = login(username, password)

    if audit is None:
        return redirect("/audit")

    arbitrate_list = Arbitrate.query.all()

    arbirate = Arbitrate.query.filter(Arbitrate.addr == arbitrate_addr).first()
    if arbirate is None:
        return render_template("audit2-5.html",
                               is_login=True,
                               audit=audit,
                               username=username,
                               arbitrate_list=arbitrate_list,
                               fail_msg="仲裁合约地址错误")

    try:
        managementAddr = Contracts.query.filter(
            Contracts.name == "Management").first().addr
        call_contract(arbitrate_addr,
                      "Arbitrate",
                      "getAuditList",
                      args=[to_checksum_address(managementAddr)],
                      signer=signer)

        res = call_contract(arbitrate_addr,
                            "Arbitrate",
                            "startAudition",
                            signer=signer)
        name_list = list(res[0])
        pub_list = list(res[1])
        addr_list = list(res[2])
    except Exception:
        traceback.print_exc()
        return render_template("audit2-5.html",
                               is_login=True,
                               audit=audit,
                               username=username,
                               arbitrate_list=arbitrate_list,
                               fail_msg="仲裁合约查询失败")

    result = zip(name_list, addr_list, pub_list)
    return render_template("arbitrate2.html",
                           is_login=True,
                           audit=audit,
                           username=username,
                           result=result,
                           arbitrate_addr=arbitrate_addr)
Esempio n. 7
0
def credit():
    is_login = check_login()

    if request.method == "GET":
        return render_template("credit2.html", is_login = is_login)

    name = request.form.get("name", None)
    if name is None or name == "":
        return render_template("credit2.html", is_login = is_login, fail_msg = "输入错误")

    ent_type = request.form.get("ent-type", None)
    if ent_type is None or ent_type not in ["agency", "engineer"]:
        return render_template("credit2.html", is_login = is_login, fail_msg = "实体类型错误")

    if ent_type == "engineer":
        ent = Engineer.query.filter(Engineer.username == name).first()
    else:
        ent = Agency.query.filter(Agency.username == name).first()

    if ent is None:
        return render_template("credit2.html", is_login = is_login, fail_msg = "未找到该实体")

    result = None
    try:
        if ent_type == "engineer":
            
            engineerListAddr = Contracts.query.filter(Contracts.name == "EngineerList").first().addr
            CreditAddr = Contracts.query.filter(Contracts.name == "Credit").first().addr

            # call_contract(engineerListAddr,"EngineerList","getCreditContractAddr", args = [])

            call_contract(engineerListAddr,"EngineerList","setCreditContractAddr", args = [to_checksum_address(CreditAddr)])

            # call_contract(engineerListAddr,"EngineerList","getCreditContractAddr", args = [])

            call_contract(engineerListAddr, "EngineerList", "updateCredit", args = [ent.eid])
            res = call_contract(engineerListAddr, "EngineerList", "getCredit", args = [ent.eid])
            result = res[0]
        else:
            CreditAddr = Contracts.query.filter(Contracts.name == "Credit").first().addr

            call_contract(ent.contract_addr,"Agency","setCreditAddr", args = [to_checksum_address(CreditAddr)])
            call_contract(ent.contract_addr, "Agency", "updateCredit", args = [])
            res = call_contract(ent.contract_addr, "Agency", "getCredit", args = [])
            result = res[0]
    except Exception:
        traceback.print_exc()
        return render_template("credit2.html", is_login = is_login, fail_msg = "查询失败")
    return render_template("credit2.html", is_login = is_login, succ_msg = "查询成功", result = result, name = name)
Esempio n. 8
0
def agency_evaluation():
    username = session.get("username", "")
    password = session.get("password", "")
    agency, signer = login(username, password)

    if agency is None:
        return redirect("/agency")
    
    if request.method == "GET":
        return render_template("agency2-3.html", is_login = True, agency = agency, username = username)

    eva_addr = request.form.get("eva-addr")
    eva_accept = request.form.get("eva-accept")
    # eva_deny = request.form.get("eva-deny")
    
    result = True if eva_accept is not None else False

    eng_list = request.form.get("eng-list", "")
    eng_list = [e for e in eng_list.split()]

    if eva_addr is None:
        return render_template("agency2-3.html", is_login = True, agency = agency, username = username, fail_msg = "缺少审查合约地址")
    
    try:
        if result:
            call_contract(agency.contract_addr, "Agency", "confirm", args = [to_checksum_address(eva_addr), eng_list], signer = signer)
        else:
            res = call_contract(agency.contract_addr, "Agency", "deny", args = [to_checksum_address(eva_addr), eng_list], signer = signer)

            arbitrate_addr = res[0]
            if "0x000000000000000" in arbitrate_addr:
                raise Exception(msg = "Error arbitrate contract address")
            app.logger.info(f"{arbitrate_addr}")
            arbitrate = Arbitrate(addr = arbitrate_addr)
            db.session.add(arbitrate)
            db.session.commit()
        # call_contract(agency.contract_addr, "Agency", "addBusiness", [[], f"审查:审查合约地址{eva_addr}"], signer = signer)
    except Exception:
        traceback.print_exc()
        return render_template("agency2-3.html", is_login = True, agency = agency, username = username, fail_msg = "调用合约失败")

    if result:
        return render_template("agency2-3.html", is_login = True, agency = agency, username = username, succ_msg = "审查通过")
    return render_template("agency2-3.html", is_login = True, agency = agency, username = username, succ_msg = "审查拒绝")
Esempio n. 9
0
def enterprise_apply():
    username = session.get("username", "")
    password = session.get("password", "")

    enterprise, signer = login(username, password)
    if enterprise is None:
        return redirect("/enterprise")

    ent_name = request.form.get("ent-name", "")
    rep_name = request.form.get("rep-name", "")
    ent_addr = request.form.get("ent-addr", "")
    ent_type = request.form.get("ent-type", "")
    ent_range = request.form.get("ent-range", "")

    try:
        enterprise = Enterprise.query.filter(
            Enterprise.username == username).first()
        enterprise.ent_name = ent_name
        enterprise.rep_name = rep_name
        enterprise.ent_addr = ent_addr
        enterprise.ent_type = ent_type
        enterprise.ent_range = ent_range

        db.session.add(enterprise)
        db.session.commit()
        call_contract(enterprise.contract_addr,
                      "Enterprise",
                      "setInformation",
                      args=[ent_name, rep_name, ent_addr, ent_type, ent_range],
                      signer=signer)
    except Exception:
        db.session.rollback()
        return render_template("enterprise2.html",
                               is_login=True,
                               fail_msg="添加信息失败",
                               enterprise=enterprise,
                               username=username)
    return render_template("enterprise2.html",
                           is_login=True,
                           succ_msg="添加信息成功",
                           enterprise=enterprise,
                           username=username)
Esempio n. 10
0
def del_engineer(index: str):
    username = session.get("username", "")
    password = session.get("password", "")
    agency, signer = login(username, password)

    if agency is None:
        return redirect("/agency")

    try:
        EngineerListAddr = db.session.query(Contracts).filter(Contracts.name == "EngineerList").first().addr
        call_contract(EngineerListAddr, "EngineerList", "deleteAgency", args = [index], signer= signer)

        engineer = Engineer.query.filter(Engineer.eid == index).first()
        if engineer is not None:
            agency.engineers.remove(engineer)
            db.session.commit()

    except Exception:
        traceback.print_exc()
        return render_template("agency2-1.html", is_login = True, agency = agency, username = username, fail_msg = "删除失败")
    return render_template("agency2-1.html", is_login = True, agency = agency, username = username, succ_msg = "删除成功")
Esempio n. 11
0
def search_report():
    is_login = check_login()

    if request.method == "GET":
        return render_template("report2.html", is_login = is_login)

    name = request.form.get("name", None)
    msg = request.form.get("msg", None)
    if name is None or msg is None or name == "" or msg == "":
        return render_template("report2.html", is_login = is_login, fail_msg = "举报对象或关键词为空")
    
    audit = Audit.query.filter(Audit.username == name).first()
    if audit is None:
        return render_template("report2.html", is_login = is_login, fail_msg = "未找到该监管部门")

    try:
        AccusationAddr = Contracts.query.filter(Contracts.name == "Accusation").first().addr
        call_contract(AccusationAddr, "Accusation", "addAccusation", args = ["", msg ,"", name])
    except Exception:
        traceback.print_exc()
        return render_template("report2.html", is_login = is_login, succ_msg = "举报合约执行失败")
    return render_template("report2.html", is_login = is_login, succ_msg = "举报成功,举报合约执行成功")
Esempio n. 12
0
def license_handle(addr):
    is_login = check_login()

    try:
        res = call_contract(addr, "License", "getInfo", args = [])
        res2 = call_contract(addr, "License", "showInfo", args = [])
    except Exception:
        traceback.print_exc()
        return render_template("index2.html", is_login = is_login, fail_msg = "证书合约地址错误或合约调用失败", count = count_numbers())

    res2 = list(res2)
    license_info = list(res)
    license_info.extend(res2)
    time_local = None
    try:
        time_local = time.localtime(license_info[5]/ 1000)
    except Exception:
        traceback.print_exc()
    if time_local is not None:
        license_info[5] = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
    try:
        agency = Agency.query.filter(Agency.contract_addr == license_info[10]).first()
        license_info[10] = agency.username
    except Exception:
        traceback.print_exc()
    
    try:
        engineer_list = []
        for e_eid in license_info[11]:
            engineer = Engineer.query.filter(Engineer.eid == e_eid).first()
            if engineer is not None:
                engineer_list.append(engineer.username)
            else:
                engineer_list.append(e_eid)
        license_info[11] = engineer_list
    except Exception:
        traceback.print_exc()
    return render_template("license2.html", is_login = is_login,license_info = license_info)
Esempio n. 13
0
def enterprise_result():
    username = session.get("username", "")
    password = session.get("password", "")

    enterprise, signer = login(username, password)
    if enterprise is None:
        return redirect("/enterprise")

    evaluation_addr = enterprise.evaluation_addr
    if evaluation_addr is None:
        return render_template("enterprise2.html",
                               is_login=True,
                               fail_msg="缺少审查合约地址",
                               enterprise=enterprise,
                               username=username)

    try:
        res = call_contract(evaluation_addr,
                            "ReportEvaluation",
                            "businessUpdate",
                            args=[],
                            signer=signer)
        license_addr = res[0]
    except Exception:
        return render_template("enterprise2.html",
                               is_login=True,
                               fail_msg="合约调用失败",
                               enterprise=enterprise,
                               username=username)

    if "0x0000000000" in license_addr:
        return render_template("enterprise2.html",
                               is_login=True,
                               fail_msg="证书暂未通过审查",
                               enterprise=enterprise,
                               username=username)
    enterprise.license_addr = license_addr

    db.session.add(enterprise)
    db.session.commit()
    return render_template("enterprise2.html",
                           is_login=True,
                           succ_msg="证书已上链",
                           enterprise=enterprise,
                           username=username)
Esempio n. 14
0
def signup(username, password) -> Tuple[Agency, Signer_Impl]:
    try:
        signer = create_account(username, password)

        agency = Agency(username = username, password = password)

        contract_addr = deploy_contract("Agency", signer = signer)
        agency.contract_addr = contract_addr
        agency.account_addr = str(signer.keypair.address)
        agency.account_pub = str(signer.keypair.public_key)
        agency.account_priv = str(signer.keypair.private_key)

        privkey, pubkey = gen_rsakey()
        agency.envelope_pub = pubkey
        agency.envelope_priv = privkey

        managementAddr = db.session.query(Contracts).filter(Contracts.name == "Management").first().addr
        EngineerListAddr = db.session.query(Contracts).filter(Contracts.name == "EngineerList").first().addr
        creditAddr = db.session.query(Contracts).filter(Contracts.name == "Credit").first().addr

        call_contract(contract_addr, "Agency", "setEngListAddr", args = [to_checksum_address(EngineerListAddr)], signer = signer)
        call_contract(contract_addr, "Agency", "setCreditAddr", args = [to_checksum_address(creditAddr)], signer = signer)
        agency.engineer_list_addr = EngineerListAddr

        # call_contract2(managementAddr, "Management", "addAgency", 
        #     args = [
        #         username, 
        #         to_checksum_address(agency.account_addr),
        #         to_checksum_address(agency.contract_addr),
        #         agency.envelope_pub, "" ], signer = signer)

    
        call_contract(managementAddr, "Management", "addAgency", 
            args = [
                username, 
                to_checksum_address(agency.account_addr),
                to_checksum_address(agency.contract_addr),
                agency.envelope_pub, ""], signer = signer)

        db.session.add(agency)
        db.session.commit()
    except Exception:
        traceback.print_exc()
        db.session.rollback()
        return None, None
    return agency, signer
Esempio n. 15
0
def upload():
    username = session.get("username", "")
    password = session.get("password", "")
    agency, signer = login(username, password)

    if agency is None:
        return redirect("/agency")
    
    if request.method == "GET":
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username)

    ent_name = request.form.get("ent-name")
    eng_list = request.form.get("eng-list", "")
    eng_list = [e for e in eng_list.split()]
    data_hash = request.form.get("data-hash")
    if ent_name is None:
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少生产企业名称")

    _,_,aal,_ = count_numbers()
    if aal < 3:
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少足够的审查实体,至少需要3家审查实体")

    enterprise = Enterprise.query.filter(Enterprise.username == ent_name).first()
    if enterprise is None:
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "生产企业名称错误")
    
    data_file = request.files.get("data-file")

    if data_file is None:
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少上传文件")
    if data_file.filename == "" : 
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少上传文件")

    data_file_path = os.path.join(app.config["UPLOAD_FOLDER"], secure_filename(data_file.filename))
    data_file.save(data_file_path)

    try:
        n = aal
        t = 3
        key, shares = shamir_encode(t, n)

        enc_data_path = os.path.join(app.config["UPLOAD_FOLDER"], "enc-"+secure_filename(data_file.filename))
        aes_encode(key, data_file_path, enc_data_path)

        data_file_addr = ipfs_client.add(enc_data_path)

        for i, audit in enumerate(Audit.query.all()):

            obj_data = IPFSObject(hash = data_file_addr["Hash"], name = secure_filename(data_file.filename), secret = shares[i][1].hex(), idx = shares[i][0])
            audit.files.append(obj_data)
            db.session.add(obj_data)
            db.session.commit()
    except Exception as e:
        traceback(e)
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, succ_msg = "IPFS上传失败")

    try:
        res = call_contract(enterprise.contract_addr, "Enterprise", "update", args=[data_hash, data_file_addr["Hash"], to_checksum_address(agency.contract_addr), eng_list], signer = signer)
        enterprise.evaluation_addr = res[0]
        db.session.commit()

        res = call_contract(enterprise.evaluation_addr, "ReportEvaluation", "businessUpdate", args = [] , signer = signer)
        licenseAddr = res[0]
        enterprise.license_addr = licenseAddr
        db.session.commit()
    except Exception:
        traceback.print_exc()
        return render_template("agency2-2.html", is_login = True, agency = agency, username = username, succ_msg = "智能合约调用失败")
    return render_template("agency2-2.html", is_login = True, agency = agency, username = username, succ_msg = "添加成功")
Esempio n. 16
0
def enterprise_upload():
    username = session.get("username", "")
    password = session.get("password", "")
    enterprise, signer = login(username, password)

    if enterprise is None:
        return redirect("/enterprise")

    if request.method == "GET":
        return render_template("enterprise2-1.html",
                               is_login=True,
                               enterprise=enterprise,
                               username=username)

    data_hash = request.form.get("data-hash")
    data_file = request.files.get("data-file")

    if data_file is None:
        return render_template("enterprise2-1.html",
                               is_login=True,
                               enterprise=enterprise,
                               username=username,
                               fail_msg="缺少上传文件")
    if data_file.filename == "":
        return render_template("enterprise2-1.html",
                               is_login=True,
                               enterprise=enterprise,
                               username=username,
                               fail_msg="缺少上传文件")

    data_file_path = os.path.join(app.config["UPLOAD_FOLDER"],
                                  secure_filename(data_file.filename))
    data_file.save(data_file_path)

    try:
        _, _, n, _ = count_numbers()
        t = 3
        key, shares = shamir_encode(t, n)

        enc_data_path = os.path.join(
            app.config["UPLOAD_FOLDER"],
            "enc-" + secure_filename(data_file.filename))
        aes_encode(key, data_file_path, enc_data_path)

        data_file_addr = ipfs_client.add(enc_data_path)

        for i, audit in enumerate(Audit.query.all()):
            obj_data = IPFSObject(hash=data_file_addr["Hash"],
                                  name=secure_filename(data_file.filename),
                                  secret=shares[i][1].hex(),
                                  idx=shares[i][0])
            audit.files.append(obj_data)
            db.session.add(obj_data)
            db.session.commit()
    except Exception as e:
        traceback(e)
        return render_template("enterprise2-1.html",
                               is_login=True,
                               enterprise=enterprise,
                               username=username,
                               succ_msg="IPFS上传失败")

    try:
        call_contract(enterprise.contract_addr,
                      "Enterprise",
                      "updateData",
                      args=[data_hash, data_file_addr["Hash"]],
                      signer=signer)
    except Exception as e:
        traceback(e)
        return render_template("enterprise2-1.html",
                               is_login=True,
                               enterprise=enterprise,
                               username=username,
                               succ_msg="智能合约调用失败")
    return render_template("enterprise2-1.html",
                           is_login=True,
                           enterprise=enterprise,
                           username=username,
                           succ_msg="添加成功")
Esempio n. 17
0
def audit_check():
    username = session.get("username", "")
    password = session.get("password", "")
    audit, signer = login(username, password)

    if audit is None:
        return redirect("/audit")

    if request.method == "GET":
        return render_template("audit2-6.html",
                               is_login=True,
                               audit=audit,
                               username=username)

    arbitrate_addr = request.form.get("arbitrate-addr")
    arbitrate_accept = request.form.get("arbitrate-accept")
    # arbitrate_deny = request.form.get("arbitrate-deny")

    if arbitrate_addr is None:
        return render_template("audit2-6.html",
                               is_login=True,
                               audit=audit,
                               username=username,
                               fail_msg="仲裁合约地址错误")

    arbirate = Arbitrate.query.filter(Arbitrate.addr == arbitrate_addr).first()
    if arbirate is None:
        return render_template("audit2-6.html",
                               is_login=True,
                               audit=audit,
                               username=username,
                               fail_msg="仲裁合约地址错误")

    result = True if arbitrate_accept is not None else False

    try:
        if result:
            res = call_contract(arbitrate_addr,
                                "Arbitrate",
                                "confirm",
                                signer=signer)
            app.logger.info(f"{res}")
            return render_template("audit2-6.html",
                                   is_login=True,
                                   audit=audit,
                                   username=username,
                                   succ_msg="仲裁通过")
        res = call_contract(arbitrate_addr, "Arbitrate", "deny", signer=signer)
        app.logger.info(f"{res}")
        return render_template("audit2-6.html",
                               is_login=True,
                               audit=audit,
                               username=username,
                               succ_msg="仲裁拒绝")
    except Exception:
        traceback.print_exc()
    return render_template("audit2-6.html",
                           is_login=True,
                           audit=audit,
                           username=username,
                           fail_msg="仲裁执行失败")