def deploy_smart_contract(args): logger.debug("deploy_smart_contract") project_directory = args.project pem_file = args.pem proxy_url = args.proxy arguments = args.arguments gas_price = args.gas_price gas_limit = args.gas_limit value = args.value metadata_upgradeable = args.metadata_upgradeable # TODO: apply guards project = load_project(project_directory) bytecode = project.get_bytecode() metadata = CodeMetadata(metadata_upgradeable) contract = SmartContract(bytecode=bytecode, metadata=metadata) environment = TestnetEnvironment(proxy_url) owner = Account(pem_file=pem_file) def flow(): tx_hash, address = environment.deploy_contract(contract, owner, arguments, gas_price, gas_limit, value) logger.info("Tx hash: %s", tx_hash) logger.info("Contract address: %s", address) utils.dump_out_json({ "tx": tx_hash, "contract": address.bech32() }, args.outfile) environment.run_flow(flow)
def upgrade_smart_contract(args): logger.debug("upgrade_smart_contract") contract_address = args.contract project_directory = args.project pem_file = args.pem proxy_url = args.proxy arguments = args.arguments gas_price = args.gas_price gas_limit = args.gas_limit value = args.value metadata_upgradeable = args.metadata_upgradeable project = load_project(project_directory) bytecode = project.get_bytecode() metadata = CodeMetadata(metadata_upgradeable) contract = SmartContract(contract_address, bytecode=bytecode, metadata=metadata) environment = TestnetEnvironment(proxy_url) caller = Account(pem_file=pem_file) def flow(): tx_hash = environment.upgrade_contract(contract, caller, arguments, gas_price, gas_limit, value) logger.info("Tx hash: %s", tx_hash) environment.run_flow(flow)
def _prepare_contract(args: Any) -> SmartContract: if args.bytecode: bytecode = utils.read_file(args.bytecode, binary=True).hex() else: project = load_project(args.project) bytecode = project.get_bytecode() metadata = CodeMetadata(args.metadata_upgradeable, args.metadata_payable) contract = SmartContract(bytecode=bytecode, metadata=metadata) return contract
help="testnet Proxy URL", default=config.get_proxy()) parser.add_argument("--contract", help="existing contract address") parser.add_argument("--pem", help="PEM file", required=True) args = parser.parse_args() logging.basicConfig(level=logging.DEBUG) # Now, we create a environment which intermediates deployment and execution proxy = ElrondProxy(args.proxy) environment = TestnetEnvironment(args.proxy) user = Account(pem_file=args.pem) # We initialize the smart contract with an actual address if IF was previously deployed, contract = SmartContract(address=args.contract, metadata=CodeMetadata(upgradeable=True)) # A flow defines the desired steps to interact with the contract. def deploy_flow(): global contract project = ProjectClang(input("Path to contract project: ")) contract.bytecode = project.get_bytecode() user.sync_nonce(proxy) tx, address = environment.deploy_contract( contract=contract, owner=user, arguments=[], gas_price=config.DEFAULT_GAS_PRICE, gas_limit=5000000,