예제 #1
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"])
예제 #2
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))
예제 #3
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
예제 #4
0
#info = client.init()
print(client.getinfo())


#从文件加载abi定义
abi_file  ="contracts/SimpleInfo.abi"
data_parser = DatatypeParser()
data_parser.load_abi_file(abi_file)
contract_abi = data_parser.contract_abi

#部署合约
print("\n>>Deploy:---------------------------------------------------------------------")
with open("contracts/SimpleInfo.bin", 'r') as load_f:
    contract_bin = load_f.read()
    load_f.close()
result = client.deploy(contract_bin)
print("deploy",result)
print("new address : ",result["contractAddress"])
contract_name =  os.path.splitext(os.path.basename(abi_file))[0]
memo = "tx:"+result["transactionHash"]
#把部署结果存入文件备查
from client.contractnote import ContractNote
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)
예제 #5
0
class ContractManager(object):
    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)

    def compile(self):
        if os.path.isfile(client_config.solc_path) or os.path.isfile(
                client_config.solcjs_path):
            try:
                Compiler.compile_file(self.sol_file, output_path="contracts/")
            except CompileError:
                print(CompileError)
        else:
            print(client_config.solc_path)
            print(client_config.solcjs_path)

    def checkContractExit(self, contract_name):
        #address = ContractNote.get_contract_addresses(contract_name)
        address = ContractNote.get_last(contract_name)
        if address is None:
            return False, None
        else:
            # 暂时返回低一个就可以了
            return True, address

    def getContractInfo(self, contractAddress):
        contract_abi = self.data_parser.contract_abi
        return contract_abi, contractAddress

    def deploy(self):
        contract_abi = self.data_parser.contract_abi

        # 部署合约
        if self.DEBUG:
            print(
                "\n>>Deploy:---------------------------------------------------------------------"
            )

        with open(self.bin_file, 'r') as load_f:
            contract_bin = load_f.read()
            load_f.close()

        contract_info = self.client.deploy(contract_bin)

        if self.DEBUG:
            print("deploy", contract_info)
            print("new address : ", contract_info["contractAddress"])

        contract_name = os.path.splitext(os.path.basename(self.abi_file))[0]
        memo = "tx:" + contract_info["transactionHash"]

        # 把部署结果存入文件备查
        ContractNote.save_address(contract_name,
                                  contract_info["contractAddress"],
                                  int(contract_info["blockNumber"], 16), memo)
        ContractNote.save_contract_address(contract_name,
                                           contract_info["contractAddress"])

        return contract_abi, contract_info

    # url = "http://47.113.185.200/group1/M00/00/00/rBjqU16nnLiASd4YAMVnXomRO6M785.mp4"
    # hashvalue = "c3c93aae6dbed266a0dc55a517960273bc0b79c5ca13afe9ca5ab2d3825540f4"
    # args = [url, hashvalue]

    def transaction(self, contract_abi, to_address, method, args):
        # 发送交易,调用一个改写数据的接口
        if self.DEBUG:
            print(
                "\n>>sendRawTransaction:----------------------------------------------------------"
            )
            print("to_address", to_address)
            print("contract_abi", contract_abi)

        receipt = self.client.sendRawTransactionGetReceipt(
            to_address, contract_abi, method, args)
        #receipt = self.client.sendRawTransaction(to_address, contract_abi, method, args)
        #print(receipt)
        txhash = receipt['transactionHash']

        #if self.DEBUG:
        # 解析receipt里的log
        #    print("\n>>parse receipt and transaction:----------------------------------------------------------")
        #    print("transaction hash: ", txhash)
        #logresult = self.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']))

        return receipt

    def call(self, contract_address, contract_abi, method, args=None):

        # 调用一下call,获取数据
        try:
            response = self.client.call(contract_address, contract_abi, method,
                                        args)
            return True, response
        except:
            import traceback
            traceback.print_exc()
            return False, "call contract error"