def get_arbitration_reason(request):
    transaction_id = int(request.POST.get('transaction_id'))

    contract_name = "User"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    res = client.call(contract_address, contract_abi, "get_arbitration_reason",
                      [transaction_id])
    client.finish()

    arbitration_reason = res[0]

    if arbitration_reason == "NULL":
        ret_code = -1  # no such transaction
        arbitration_reason = ""
    else:
        ret_code = 0  # success

    return JsonResponse({
        "code": ret_code,
        "arbitration_reason": arbitration_reason,
    })
Ejemplo n.º 2
0
class HelloWorld:  # name of abi
    address = None
    contract_abi_string = '''[{"constant": false, "inputs": [{"name": "n", "type": "string"}], "name": "set", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function"}, {"constant": true, "inputs": [], "name": "get", "outputs": [{"name": "", "type": "string"}], "payable": false, "stateMutability": "view", "type": "function"}, {"inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor"}, {"anonymous": false, "inputs": [{"indexed": false, "name": "newname", "type": "string"}], "name": "onset", "type": "event", "topic": "0xafb180742c1292ea5d67c4f6d51283ecb11e49f8389f4539bef82135d689e118"}]'''
    contract_abi = None
    data_parser = DatatypeParser()
    client = None

    def __init__(self, address):
        self.client = BcosClient()
        self.address = address
        self.contract_abi = json.loads(self.contract_abi_string)
        self.data_parser.set_abi(self.contract_abi)

    def deploy(self, contract_bin_file):
        result = self.client.deployFromFile(contract_bin_file)
        self.address = result["contractAddress"]
        return result

    # ------------------------------------------
    def set(self, n):
        func_name = 'set'
        args = [n]
        receipt = self.client.sendRawTransactionGetReceipt(
            self.address, self.contract_abi, func_name, args)
        outputresult = self.data_parser.parse_receipt_output(
            func_name, receipt['output'])
        return outputresult, receipt

    # ------------------------------------------
    def get(self):
        func_name = 'get'
        args = []
        result = self.client.call(self.address, self.contract_abi, func_name,
                                  args)
        return result
Ejemplo n.º 3
0
def EventEmitter(stub, initHeight):
    data_parser = DatatypeParser()
    try:
        client = BcosClient()
        lastHeight = initHeight
        while 1:
            currHeight = client.getBlockNumber()
            if currHeight > lastHeight:
                for height in range(lastHeight + 1, currHeight + 1):
                    result = client.getBlockByNumber(
                        height, _includeTransactions=False)
                for hash in result["transactions"]:
                    receipt = client.getTransactionReceipt(hash)
                    logs = data_parser.parse_event_logs(receipt["logs"])
                    for log in logs:
                        print(log)
                        if log["eventname"] == "Task1Finished":
                            stub.PublishMessage(
                                gateway_pb2.PublishMessageRequest(
                                    name="task1",
                                    correlationKey="task1",
                                    variables=json.dumps(
                                        {"contract": receipt["to"]})))
                        elif log["eventname"] == "Task2Finished":
                            stub.PublishMessage(
                                gateway_pb2.PublishMessageRequest(
                                    name="task2",
                                    correlationKey=receipt["to"]))
    except BcosException as e:
        print("execute demo_transaction failed for: {}".format(e))
    except BcosError as e:
        print("execute demo_transaction failed for: {}".format(e))
def auth_user(request):
    user_id = request.POST.get('user_id')
    user_password = request.POST.get('user_password')

    contract_name = "Admin"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    res = client.call(contract_address, contract_abi, "valid_psd",
                      [user_id, user_password])
    client.finish()

    code_map = {
        1: 0,  # success 
        -1: -1,  # user don't exists
        -2: -2,  # wrong password
    }
    ret_code = code_map[res[0]]

    return JsonResponse({"code": ret_code})
def get_user_info(request):
    user_id = request.POST.get('user_id')

    contract_name = "User"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    res = client.call(contract_address, contract_abi, "get_user_info",
                      [user_id])
    client.finish()

    user_info = {
        "id": res[0],
        "info": res[1],
        "balance": res[2],
        "state": res[3],
    }

    ret_code = 0 if user_info["state"] != -999 else -1
    response = {
        "code": ret_code,
    }
    if ret_code == 0:
        response["user"] = user_info

    return JsonResponse(response)
def get_commodity_info(request):
    commodity_id = int(request.POST.get('commodity_id'))

    contract_name = "User"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    res = client.call(contract_address, contract_abi, "get_commodity_info",
                      [commodity_id])
    client.finish()

    commodity_info = {
        "owner": res[0],
        "name": res[1],
        "image": res[2],
        "desc": res[3],
        "price": res[4],
        "state": res[5],
        "id": res[6],
        "type": res[7],
    }

    ret_code = 0 if commodity_info["state"] != -999 else -1
    response = {
        "code": ret_code,
    }
    if ret_code == 0:
        response["commodity"] = commodity_info

    return JsonResponse(response)
def main(argv):
    global parser
    global client
    if len(argv) < 3:
        usage()
        exit(0)

    contractname = argv[0]
    address = argv[1]
    event_name = argv[2]
    indexed_value = argv[3:]

    try:
        print("usage input {},{},{},{}".format(contractname, address,
                                               event_name, indexed_value))
        if address == "last":
            cn = ContractNote()
            address = cn.get_last(contractname)
            print("hex address :", address)
        abifile = "contracts/" + contractname + ".abi"
        parser = DatatypeParser(abifile)
        client = BcosClient()
        print(client.getinfo())
        register_event_callback([address], event_name, indexed_value)
    except Exception as e:
        import traceback
        traceback.print_exc()
        client.finish()
        import time
        time.sleep(0.5)
        sys.exit(-1)
def get_transaction_info(request):
    transaction_id = int(request.POST.get('transaction_id'))

    contract_name = "User"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    res = client.call(contract_address, contract_abi, "get_transaction_info",
                      [transaction_id])
    client.finish()

    transaction_info = {
        "user_id_sell": res[1],
        "user_id_buy": res[2],
        "desc": res[3],
        "commodity_id": res[4],
        "price": res[5],
        "state": res[6],
        "id": transaction_id,
    }

    ret_code = 0 if transaction_info["state"] != -999 else -1
    response = {
        "code": ret_code,
    }
    if ret_code == 0:
        response["transaction"] = transaction_info

    return JsonResponse(response)
Ejemplo n.º 9
0
    def __init__(self, address: str):
        abi_file = "contracts/Con.abi"
        data_parser = DatatypeParser()
        data_parser.load_abi_file(abi_file)
        self.contract_abi = data_parser.contract_abi

        self.client = BcosClient()
        self.to_address = address
Ejemplo n.º 10
0
 def fisco_select_data(self, func_name, args):
     client = BcosClient()
     try:
         print('start')
         res = client.call(self.contract_address, self.contract_abi, func_name, args)
         print("call get result:", res)
         # 关闭连接
         client.finish()
         return res
     except:
         return None
Ejemplo n.º 11
0
    def __init__(self):        
        self.client = BcosClient()
        self.dataparser = DatatypeParser()

        self.dataparser.load_abi_file("./pythonsdk/contracts/Receipt2.abi")
        self.RECEIPT_ABI = self.dataparser.contract_abi
        self.dataparser.load_abi_file("./pythonsdk/contracts/Company.abi")
        self.COMPANY_ABI = self.dataparser.contract_abi
        self.COMPANY_ADDRESS = "0x2d1c577e41809453c50e7e5c3f57d06f3cdd90ce"
        self.RECEIPT_ADDRESS = "0x98bc6df6b170d66fb5de93cf69b1f8746908f6d5"
        # res = self.client.load_default_account()
        self.BANK_ADDRESS = "0x3e4bf936a2ede27947a2c161abbdfc39df4619ab"
Ejemplo n.º 12
0
    def __init__(self, sol_file, abi_file, bin_file, DEBUG=True):
        # 实例化client
        self.client = BcosClient()
        self.sol_file = sol_file
        self.abi_file = abi_file
        self.bin_file = bin_file
        self.DEBUG = DEBUG

        self.data_parser = DatatypeParser()

        if not os.path.isfile(self.abi_file):
            self.compile()

        self.data_parser.load_abi_file(self.abi_file)
Ejemplo n.º 13
0
def fisco_add_data_demo():
    try:
        client = BcosClient()
        print(client.getinfo())

        abi_file = os.path.join(settings.SITE_ROOT, "contracts",
                                "HelloWorld.abi")
        data_parser = DatatypeParser()
        data_parser.load_abi_file(abi_file)
        contract_abi = data_parser.contract_abi

        # 发送交易,调用一个改写数据的接口
        print(
            "\n>>sendRawTransaction:----------------------------------------------------"
        )
        to_address = '0x548fd1e8af9ca9131c04ab7e1031579f6498ddaf'  # use new deploy address
        args = ["xy1211ddd"]

        receipt = client.sendRawTransactionGetReceipt(to_address, contract_abi,
                                                      "set", args)
        print("receipt:", receipt)

        # 解析receipt里的log
        print(
            "\n>>parse receipt and transaction:--------------------------------------"
        )
        tx_hash = receipt['transactionHash']
        print("transaction hash: ", tx_hash)
        log_result = data_parser.parse_event_logs(receipt["logs"])
        i = 0
        for log in log_result:
            if 'eventname' in log:
                i = i + 1
                print("{}): log name: {} , data: {}".format(
                    i, log['eventname'], log['eventdata']))
        # 获取对应的交易数据,解析出调用方法名和参数

        tx_response = client.getTransactionByHash(tx_hash)
        input_result = data_parser.parse_transaction_input(
            tx_response['input'])
        print("transaction input parse:", tx_hash)
        print(input_result)

        # 解析该交易在receipt里输出的output,即交易调用的方法的return值
        output_result = data_parser.parse_receipt_output(
            input_result['name'], receipt['output'])
        print("receipt output :", output_result)

        # 调用一下call,获取数据
        print(
            "\n>>Call:------------------------------------------------------------------------"
        )
        res = client.call(to_address, contract_abi, "get")
        print("call get result:", res)

        # 关闭连接
        client.finish()

    except:
        pass
Ejemplo n.º 14
0
def deploy():
    client = BcosClient()
    #从文件加载abi定义
    abi_file  ="contracts/SoftwareTransaction.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    #部署合约
    with open("contracts/SoftwareTransaction.bin", 'r') as load_f:
        contract_bin = load_f.read()
        load_f.close()
    result = client.deploy(contract_bin)
    print("contract address:", result["contractAddress"])
Ejemplo n.º 15
0
    def __init__(self, address: str):
        # 从文件加载abi定义
        # Now file has been complied. Use .abi directly.

        if os.path.isfile(client_config.solc_path) or os.path.isfile(
                client_config.solcjs_path):
            Compiler.compile_file("contracts/Loan.sol")

        abi_file = "contracts/Loan.abi"
        data_parser = DatatypeParser()
        data_parser.load_abi_file(abi_file)
        self.contract_abi = data_parser.contract_abi

        self.client = BcosClient()

        self.to_address = address
Ejemplo n.º 16
0
    def start(self):
        print('client '+str(self.id)+" start")

        bcos_event = BcosEventCallback()
        bcos_event.setclient(BcosClient())

        cn = ContractNote()
        address = cn.get_last('gmodel')

        abifile = "contracts/gmodel.abi"
        abiparser = DatatypeParser(abifile)

        eventcallback01 = EventCallbackImpl01(self.model,self.Update,self.Gmodel,self.cur_round,self.fdfs)

        eventcallback01.abiparser = abiparser

        print("register events")

        result = bcos_event.register_eventlog_filter(
            eventcallback01, abiparser, [address], 'modelupdate', None)

        print(
            "after register ,event_name:{},result:{},all:{}".format(
                'modelupdate',
                result['result'], result))

        #获取全局模型轮次
        cur_round = self.Gmodel.get_round()[1][0]

        while(cur_round<5):
            print("the "+str(cur_round)+" th round")
            print("client "+str(self.id)+" waiting gmodel_update...")
            cur_round = self.Gmodel.get_round()[1][0]
            time.sleep(10)
Ejemplo n.º 17
0
def main(argv):
    if len(argv) < 2:
        usage()
        exit(0)

    contractname = argv[0]
    address = argv[1]
    event_name = None
    indexed_value = None
    if len(argv) > 2:
        event_name = argv[2]
        indexed_value = argv[3:]
    try:
        bcos_event = BcosEventCallback()
        if client_config.client_protocol is not client_config.PROTOCOL_CHANNEL:
            print(
                "** using event callback, client prototol MUST be client_config.PROTOCOL_CHANNEL!!"
            )
            print("** please check the configure file")
            sys.exit(-1)

        bcos_event.setclient(BcosClient())
        print(bcos_event.client.getinfo())

        print("usage input {},{},{},{}".format(contractname, address,
                                               event_name, indexed_value))
        print(address)
        if address == "last" or address == "latest":
            cn = ContractNote()
            address = cn.get_last(contractname)
            print("hex address :", address)
        abifile = "contracts/" + contractname + ".abi"
        abiparser = DatatypeParser(abifile)
        eventcallback01 = EventCallbackImpl01()
        eventcallback02 = EventCallbackImpl02()
        eventcallback01.abiparser = abiparser
        eventcallback02.abiparser = abiparser

        result = bcos_event.register_eventlog_filter(eventcallback01,
                                                     abiparser, [address],
                                                     event_name, indexed_value)
        #result = bcos_event.register_eventlog_filter(eventcallback02,abiparser, [address], "on_number")

        print("after register ,event_name:{},result:{},all:{}".format(
            event_name, result['result'], result))

        while True:
            print("waiting event...")
            time.sleep(10)
    except Exception as e:
        print("Exception!")
        import traceback
        traceback.print_exc()
    finally:
        print("event callback finished!")
        if bcos_event.client is not None:
            bcos_event.client.finish()
    sys.exit(-1)
Ejemplo n.º 18
0
def Task2(job, stub):
    print(job)
    data_parser = DatatypeParser()
    data_parser.load_abi_file(public.abi_file)
    contract_abi = data_parser.contract_abi
    client = BcosClient()

    address = json.loads(job.variables)["contract"]
    receipt = client.sendRawTransactionGetReceipt(address, contract_abi,
                                                  "Task2")
    stub.SetVariables(
        gateway_pb2.SetVariablesRequest(
            elementInstanceKey=job.workflowInstanceKey,
            variables=json.dumps({"tx": receipt["transactionHash"]})))
    if bool(receipt["output"]):
        stub.CompleteJob(gateway_pb2.CompleteJobRequest(jobKey=job.key))
    else:
        stub.FailJob(gateway_pb2.FailJobRequest(jobKey=job.Key))
Ejemplo n.º 19
0
def deploySmartContract():
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi
    try:
        client = BcosClient()
        # 部署合约
        with open("contracts/v1_2.bin", 'r') as load_f:
            contract_bin = load_f.read()
            load_f.close()
        result = client.deploy(contract_bin)
        # init
        client.sendRawTransactionGetReceipt(result["contractAddress"],
                                            contract_abi, "Init")
        return result["contractAddress"]
    except BcosException as e:
        print("execute demo_transaction failed for: {}".format(e))
    except BcosError as e:
        print("execute demo_transaction failed for: {}".format(e))
Ejemplo n.º 20
0
def deploy_contract(contract,
                    is_compile: bool = False,
                    signer: Signer_Impl = None,
                    fn_args=None):
    """
    Args:
        contract: the contract's name, e.g.: "EngineerList"
        is_compile (bool): compile or not
    Returns:
        the contract address
    """
    if is_compile and (os.path.isfile(client_config.solc_path)
                       or os.path.isfile(client_config.solcjs_path)):
        Compiler.compile_file(f"Contracts/{contract}.sol",
                              output_path="Contracts")

    data_parser = DatatypeParser()
    data_parser.load_abi_file(f"Contracts/{contract}.abi")

    client = BcosClient()
    try:
        with open(f"Contracts/{contract}.bin", 'r') as load_f:
            contract_bin = load_f.read()
            load_f.close()
        result = client.deploy(contract_bin,
                               contract_abi=data_parser.contract_abi,
                               fn_args=fn_args,
                               from_account_signer=signer)
        addr = result["contractAddress"]
    except BcosError:
        traceback.print_exc()
        return None
    except BcosException:
        traceback.print_exc()
        return None
    except Exception:
        traceback.print_exc()
        return None
    finally:
        client.finish()
    app.logger.info(f"deploy contract {contract} at {addr}")
    return addr
Ejemplo n.º 21
0
 def exec_command(self, cmd, params):
     """
     exec_command
     """
     self.client = BcosClient()
     function_name = self.get_func_name(cmd)
     # execute function
     ret_json = eval(function_name)(*params)
     common.print_info("INFO", self.cmd)
     common.print_result(ret_json)
     return ret_json
Ejemplo n.º 22
0
 def fisco_add_data(self, func_name, args):
     client = BcosClient()
     try:
         print('start')
         # 发送交易
         receipt = client.sendRawTransactionGetReceipt(self.contract_address, self.contract_abi, func_name, args)
         print("receipt:", receipt)
         # 解析receipt里的log
         print("parse receipt and transaction:--------------------------------------")
         tx_hash = receipt['transactionHash']
         print("transaction hash: ", tx_hash)
         log_result = self.data_parser.parse_event_logs(receipt["logs"])
         i = 0
         for log in log_result:
             if func_name in log:
                 i = i + 1
                 print("{}): log name: {} , data: {}".format(i, log[func_name], log['eventdata']))
         # 获取对应的交易数据,解析出调用方法名和参数
         tx_response = client.getTransactionByHash(tx_hash)
         input_result = self.data_parser.parse_transaction_input(tx_response['input'])
         print("transaction input parse:", tx_hash)
         print(input_result)
         # 解析该交易在receipt里输出的output,即交易调用的方法的return值
         output_result = self.data_parser.parse_receipt_output(input_result['name'], receipt['output'])
         print("receipt output :", output_result)
         return output_result,tx_hash
     except:
         pass
     finally:
         # 关闭连接
         client.finish()
Ejemplo n.º 23
0
def buy_commodity(request):
    user_id = request.POST.get('user_id')
    commodity_id = int(request.POST.get('commodity_id'))
    transaction_desc = request.POST.get('transaction_desc', "")

    contract_name = "User"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    receipt = client.sendRawTransactionGetReceipt(
        contract_address, contract_abi, "buy_commodity",
        [user_id, commodity_id, transaction_desc])
    txhash = receipt['transactionHash']
    txresponse = client.getTransactionByHash(txhash)
    inputresult = data_parser.parse_transaction_input(txresponse['input'])
    res = data_parser.parse_receipt_output(inputresult['name'],
                                           receipt['output'])
    client.finish()

    code_map = {
        0: 0,  # success 
        -1: -1,  # user state error
        -2: -2,  # commodity state error
        -3: -3,  # no enough money
        -4: -4,  # unable to change owner of commodity
        -5: -5,  # ubable to generate transaction
    }
    ret_code = code_map[res[0]]

    return JsonResponse({"code": ret_code})
Ejemplo n.º 24
0
def initiate_arbitration(request):
    user_id = request.POST.get('user_id')
    transaction_id = int(request.POST.get('transaction_id'))
    arbitration_reason = request.POST.get('arbitration_reason')

    contract_name = "User"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    receipt = client.sendRawTransactionGetReceipt(
        contract_address, contract_abi, "initiate_arbitration",
        [user_id, transaction_id, arbitration_reason])
    txhash = receipt['transactionHash']
    txresponse = client.getTransactionByHash(txhash)
    inputresult = data_parser.parse_transaction_input(txresponse['input'])
    res = data_parser.parse_receipt_output(inputresult['name'],
                                           receipt['output'])
    client.finish()

    code_map = {
        0: 0,  # success 
        -1: -1,  # user state error
        -2: -2,  # no such transaction
        -3: -3,  # unable to change state
        -4: -4,  # arbitration timeout
        -5: -5,  # unknown error
    }
    ret_code = code_map[res[0]]

    return JsonResponse({"code": ret_code})
Ejemplo n.º 25
0
def user_transaction_sell_list(request):
    user_id = request.POST.get('user_id')

    max_item_count = request.POST.get("page_max_items")
    page_id = request.POST.get("page_id")
    if max_item_count is None or page_id is None:
        max_item_count = page_id = None
    else:
        max_item_count = int(max_item_count)
        page_id = int(page_id)
        if max_item_count < 1 or page_id < 0:
            max_item_count = page_id = None

    contract_name = "User"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    sell_res = client.call(contract_address, contract_abi,
                           "get_transaction_sell_list", [user_id])

    transaction_sell_list = []
    transaction_sell_count = 0
    for transaction_id in sell_res[0]:
        res = client.call(contract_address, contract_abi,
                          "get_transaction_info", [transaction_id])
        transaction_info = {
            "user_id_sell": res[1],
            "user_id_buy": res[2],
            "desc": res[3],
            "commodity_id": res[4],
            "price": res[5],
            "state": res[6],
            "id": transaction_id,
        }
        ret_code = 0 if transaction_info["state"] != -999 else -1
        if ret_code == 0:
            transaction_sell_list.append(transaction_info)
            transaction_sell_count += 1

    client.finish()

    if max_item_count is None:
        page_num = 1 if len(transaction_sell_list) > 0 else 0
    else:
        page_num = (len(transaction_sell_list) + max_item_count -
                    1) // max_item_count
        transaction_sell_list = transaction_sell_list[page_id *
                                                      max_item_count:(page_id +
                                                                      1) *
                                                      max_item_count]

    return JsonResponse({
        "transaction_list": transaction_sell_list,
        "page_num": page_num,
    })
Ejemplo n.º 26
0
def down_commodity(request):
    user_id = request.POST.get('user_id')
    commodity_id = int(request.POST.get('commodity_id'))

    contract_name = "User"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    receipt = client.sendRawTransactionGetReceipt(contract_address,
                                                  contract_abi,
                                                  "putdown_commodity",
                                                  [user_id, commodity_id])
    txhash = receipt['transactionHash']
    txresponse = client.getTransactionByHash(txhash)
    inputresult = data_parser.parse_transaction_input(txresponse['input'])
    res = data_parser.parse_receipt_output(inputresult['name'],
                                           receipt['output'])
    client.finish()

    code_map = {
        1: 0,  # success 
        -1: -1,  # user state error
        -2: -2,  # unknown error
    }
    ret_code = code_map[res[0]]

    return JsonResponse({"code": ret_code})
Ejemplo n.º 27
0
def deal_arbitration(request):
    transaction_id = int(request.POST.get('transaction_id'))
    arbitration_valid = int(request.POST.get('arbitration_valid'))

    contract_name = "Admin"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    receipt = client.sendRawTransactionGetReceipt(
        contract_address, contract_abi, "deal_arbitration",
        [transaction_id, arbitration_valid])
    txhash = receipt['transactionHash']
    txresponse = client.getTransactionByHash(txhash)
    inputresult = data_parser.parse_transaction_input(txresponse['input'])
    res = data_parser.parse_receipt_output(inputresult['name'],
                                           receipt['output'])
    client.finish()

    code_map = {
        0: 0,  # success
        -1: -1,  # no such transaction
        -2: -2,  # unable to undo transaction
        -3: -3,  # unable to change transaction state
        -4: -4,  # unable to change commodity state
        -5: 0,  # success
    }
    ret_code = code_map[res[0]]

    return JsonResponse({"code": ret_code})
Ejemplo n.º 28
0
 def exec_command(self, cmd, params):
     """
     exec_command
     """
     self.client = BcosClient()
     function_name = self.get_func_name(cmd)
     # execute function
     ret_json = eval(function_name)(*params)
     common.print_info("INFO", self.cmd)
     if cmd in RPCConsole.functions["human_friendly_output"]:
         ret_json = self.convertHexToDec(cmd, ret_json)
     common.print_result(ret_json)
     return ret_json
Ejemplo n.º 29
0
    def test():
        # 初始化bcos客户端
        try:
            client = BcosClient()

            while True:
                model, epoch = client.call(to_address, contract_abi,
                                           "QueryGlobalModel")
                model = deserialize(model)
                ser_W, ser_b = model['ser_W'], model['ser_b']

                nonlocal test_epoch
                if epoch > test_epoch:
                    test_acc = global_testing(ser_W, ser_b)
                    print("Epoch: {:03}, test_acc: {:.4f}"\
                        .format(test_epoch, test_acc))
                    test_epoch = epoch

                wait()

        except Exception as e:
            client.finish()
            traceback.print_exc()
Ejemplo n.º 30
0
def user_commodity_list(request):
    user_id = request.POST.get('user_id')

    max_item_count = request.POST.get("page_max_items")
    page_id = request.POST.get("page_id")
    if max_item_count is None or page_id is None:
        max_item_count = page_id = None
    else:
        max_item_count = int(max_item_count)
        page_id = int(page_id)
        if max_item_count < 1 or page_id < 0:
            max_item_count = page_id = None

    contract_name = "User"
    contract_address = ContractNote.get_last(contract_name)

    abi_file = f"contracts/{contract_name}.abi"
    data_parser = DatatypeParser()
    data_parser.load_abi_file(abi_file)
    contract_abi = data_parser.contract_abi

    client = BcosClient()
    res = client.call(contract_address, contract_abi, "get_commodity_list",
                      [user_id])

    commodity_id_list, commodity_count = res
    commodity_list = []
    for commodity_id in commodity_id_list:
        commodity_info = client.call(contract_address, contract_abi,
                                     "get_commodity_info", [commodity_id])
        commodity_info = {
            "owner": commodity_info[0],
            "name": commodity_info[1],
            "image": commodity_info[2],
            "desc": commodity_info[3],
            "price": commodity_info[4],
            "state": commodity_info[5],
            "id": commodity_info[6],
            "type": commodity_info[7],
        }
        if commodity_info["state"] != -999:
            commodity_list.append(commodity_info)

    client.finish()

    if max_item_count is None:
        page_num = 1 if len(commodity_list) > 0 else 0
    else:
        page_num = (len(commodity_list) + max_item_count - 1) // max_item_count
        commodity_list = commodity_list[page_id *
                                        max_item_count:(page_id + 1) *
                                        max_item_count]

    return JsonResponse({
        "commodity_list": commodity_list,
        "page_num": page_num,
    })