コード例 #1
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))
コード例 #2
0
def print_output_and_input(logs, output, txinput, contract_name, contract_path):
    """
    parse_output_from_abi
    """
    abi_path = os.path.join(contract_path, contract_name + ".abi")
    if os.path.isfile(abi_path) is False:
        raise BcosException("parse outpt failed for {} doesn't exist"
                            .format(abi_path))
    try:
        dataParser = DatatypeParser(abi_path)
        # parse txinput
        input_result = dataParser.parse_transaction_input(txinput)
        if input_result is not None:
            print_info("txinput result", input_result)
            # get function name
            fn_name = input_result["name"]
            output_result = dataParser.parse_receipt_output(fn_name, output)
            if output_result is None:
                print_info("INFO", "empty return, output: {}".format(output))
                return
            print_info("output result", output_result)
        log_result = dataParser.parse_event_logs(logs)
        print_receipt_logs(log_result)
        # print_info("log result", log_result)

    except Exception as e:
        raise BcosException("parse output failed for reason: {}".format(e))
コード例 #3
0
ファイル: fisco_demo_utils.py プロジェクト: jonneyhu/fisco
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
コード例 #4
0
ファイル: console.py プロジェクト: tjnh05/python-sdk
def print_receipt_logs_and_txoutput(client,
                                    receipt,
                                    contractname,
                                    parser=None):
    print("\nINFO >>  receipt logs : ")
    # 解析receipt里的log
    if parser is None and len(contractname) > 0:
        parser = DatatypeParser(default_abi_file(contractname))
    logresult = parser.parse_event_logs(receipt["logs"])
    # modified by Bodhi Wang
    # 2019.11.26
    """
    i = 0
    for log in logresult:
        if 'eventname' in log:
            i = i + 1
            print("{}): log name: {} , data: {}".format(i, log['eventname'], log['eventdata']))
    """
    for i, log in enumerate(
        [result for result in logresult if 'eventname' in result]):
        print("{}): log name: {} , data: {}".format(i, log['eventname'],
                                                    log['eventdata']))

    txhash = receipt["transactionHash"]
    txresponse = client.getTransactionByHash(txhash)
    inputdetail = print_parse_transaction(txresponse, "", parser)
    # 解析该交易在receipt里输出的output,即交易调用的方法的return值
    outputresult = parser.parse_receipt_output(inputdetail['name'],
                                               receipt['output'])
    print("receipt output :", outputresult)
コード例 #5
0
class Client:
    def __init__(self,contract_name, contract_address):

        abi_file = os.path.join(settings.SITE_ROOT, "contracts", contract_name + ".abi")
        self.data_parser = DatatypeParser()
        self.data_parser.load_abi_file(abi_file)
        self.contract_abi = self.data_parser.contract_abi
        self.contract_address = contract_address
    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()


    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
コード例 #6
0
def print_receipt_logs_and_txoutput(client,
                                    receipt,
                                    contractname,
                                    parser=None):
    if parser is None and len(contractname) > 0:
        parser = DatatypeParser(default_abi_file(contractname))
    logresult = parser.parse_event_logs(receipt["logs"])
    txhash = receipt["transactionHash"]
    txresponse = client.getTransactionByHash(txhash)
    inputdetail = print_parse_transaction(txresponse, "", parser)
    # 解析该交易在receipt里输出的output,即交易调用的方法的return值
    outputresult = parser.parse_receipt_output(inputdetail['name'],
                                               receipt['output'])
    return outputresult
コード例 #7
0
def print_receipt_logs_and_txoutput(client,
                                    receipt,
                                    contractname,
                                    parser=None):
    print("INFO >>  receipt logs : ")
    # 解析receipt里的log
    if parser is None and len(contractname) > 0:
        parser = DatatypeParser(default_abi_file(contractname))
    logresult = parser.parse_event_logs(receipt["logs"])
    i = 0
    # print(json.dumps(logresult,indent=4))
    for log in logresult:
        if "eventname" in log:
            i = i + 1
            print("{}): log name: {} , data: {} , topic: {}".format(
                i, log["eventname"], log["eventdata"], log["topic"]))
    inputdetail = print_parse_transaction(receipt, "", parser)
    # 解析该交易在receipt里输出的output,即交易调用的方法的return值
    outputresults = parser.parse_receipt_output(inputdetail["name"],
                                                receipt["output"])
    common.print_tx_result(outputresults)
コード例 #8
0
ContractNote.save_address(contract_name, result["contractAddress"], int(result["blockNumber"], 16), memo)


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

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

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

txresponse = client.getTransactionByHash(txhash)
inputresult = data_parser.parse_transaction_input(txresponse['input'])
print("transaction input parse:",txhash)
print(inputresult)

#解析该交易在receipt里输出的output,即交易调用的方法的return值
outputresult  = data_parser.parse_receipt_output(inputresult['name'], receipt['output'])
print("receipt output :",outputresult)
コード例 #9
0
                          int(result["blockNumber"], 16), memo)

#发送交易,调用一个改写数据的接口
print(
    "\n>>sendRawTransaction:----------------------------------------------------------"
)
to_address = result['contractAddress']  #use new deploy address
args = [
    'simplename', 2024,
    to_checksum_address('0x7029c502b4F824d19Bd7921E9cb74Ef92392FB1c')
]
receipt = client.sendRawTransactionGetReceipt(to_address, contract_abi, "set",
                                              args)
print(receipt)
#解析receipt里的log
logresult = abi_parser.parse_event_logs(receipt["logs"])
for log in logresult:
    if 'eventname' in log:
        print("log name: {} , data: {}".format(log['eventname'],
                                               log['eventdata']))
#获取对应的交易数据,解析出调用方法名和参数
txhash = receipt['transactionHash']
txresponse = client.getTransactionByHash(txhash)
inputresult = abi_parser.parse_transaction_input(txresponse['input'])
print("transaction input parse:", txhash)
print(inputresult)

#解析该交易在receipt里输出的output,即交易调用的方法的return值
outputresult = abi_parser.parse_receipt_output(inputresult['name'],
                                               receipt['output'])
print("receipt output :", outputresult)
コード例 #10
0
  @date: 2019-06
'''
from client.datatype_parser import DatatypeParser

import json

if (True):
    parser = DatatypeParser()
    parser.load_abi_file("sample/SimpleInfo.abi")
    parser.parse_abi()

    with open("sample/receipt.json", "r") as f:
        receipt = json.load(f)
        f.close()
    logs = receipt["logs"]
    parser.parse_event_logs(logs)
    print("parse result")
    for log in logs:
        print(log)
    result = parser.parse_receipt_output("set", receipt['output'])
    print("output :", result)

if True:
    parser = DatatypeParser()
    parser.load_abi_file("sample/SimpleInfo.abi")
    parser.parse_abi()
    with open("sample/tx_simpleinfo_set.json", "r") as f:
        tx = json.load(f)
        f.close()
    result = parser.parse_transaction_input(tx["input"])
    print(result)
コード例 #11
0
ファイル: fisco_demo_utils.py プロジェクト: jonneyhu/fisco
def fisco_add_data_demo1():
    try:
        client = BcosClient()
        print(client.getinfo())
        print(client.client_account)
        abi_file = os.path.join(settings.SITE_ROOT, "contracts",
                                "UserTempInfo.abi")
        data_parser = DatatypeParser()
        data_parser.load_abi_file(abi_file)
        contract_abi = data_parser.contract_abi

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

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

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

        # 解析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,获取数据
        args = ['99999']
        print(
            "\n>>Call:------------------------------------------------------------------------"
        )
        res = client.call(to_address, contract_abi, "select", args)
        print("call get result:", res)

        print(
            "\n>>Call:------------------------------------------------------------------------"
        )
        res = client.call(to_address, contract_abi, "selectLatest", args)
        print("call get result:", res)

        # 关闭连接
        client.finish()

    except:
        pass