def test(): stop() nodeos([ "--http-server-address", config.http_server_address(), "--data-dir", config.data_dir(), "--config-dir", config.config_dir(), "--chain-state-db-size-mb", config.chain_state_db_size_mb(), "--contracts-console", "--verbose-http-errors", "--enable-stale-production", "--producer-name eosio", "--signature-provider " + config.eosio_key_public() + "=KEY:" + config.eosio_key_private(), "--plugin eosio::producer_plugin", "--plugin eosio::chain_api_plugin", "--plugin eosio::http_plugin", "--plugin eosio::history_api_plugin", "--genesis-json", config.genesis_json(), "--delete-all-blocks" ]) node_probe() stop() if not node_probe(): logger.TRACE("Confirmed, node is stopped.") nodeos([ "--http-server-address", config.http_server_address(), "--data-dir", config.data_dir(), "--config-dir", config.config_dir(), "--chain-state-db-size-mb", config.chain_state_db_size_mb(), "--contracts-console", "--verbose-http-errors", "--enable-stale-production", "--producer-name eosio", "--signature-provider " + config.eosio_key_public() + "=KEY:" + config.eosio_key_private(), "--plugin eosio::producer_plugin", "--plugin eosio::chain_api_plugin", "--plugin eosio::http_plugin", "--plugin eosio::history_api_plugin" ]) node_probe() stop() src_file = os.path.join(config.eosf_dir(), "contracts/01_hello_world/src/hello_world.cpp") #"contracts/01_hello_world/src/hello_world.cpp") abi_file = os.path.join(config.eosf_dir(), "contracts/01_hello_world/build/hello_world.abi") abi(src_file, abi_file) wasm_file = os.path.join( config.eosf_dir(), "contracts/01_hello_world/build/hello_world.wasm") wasm(src_file, wasm_file)
``` eosfactory.core.errors.Error: ERROR: Error 3090003: Provided keys, permissions, and delays do not satisfy declared authorizations Ensure that you have the related private keys inside your wallet and your wallet is unlocked. Error Details: transaction declares authority '{"actor":"ALICE","permission":"active"}', but does not have signatures for it. ``` ''' import sys, os import eosfactory.core.config as config from eosfactory.eosf import * verbosity([Verbosity.INFO, Verbosity.OUT, Verbosity.DEBUG]) #CONTRACT_WORKSPACE = os.path.join(config.eosf_dir(), "contracts/hello_world") CONTRACT_WORKSPACE = os.path.join(config.eosf_dir(), "contracts/eosio_token") reset() MASTER = new_master_account() COMMENT(''' Build and deploy the contract: ''') COMMENT(''' Create test accounts: ''') ALICE = new_account(MASTER) print(ALICE.active_key) print(get_wallet().keys())
def project_from_template( project_name, template=None, workspace_dir=None, c_cpp_prop_path=None, include=None, libs=None, remove_existing=False, open_vscode=False, throw_exists=False, verbosity=None): '''Given the project name and template name, create a smart contract project. - **parameters**:: project_name: The name of the project, or an existing path to a directory. template: The name of the template used. workspace_dir: If set, the folder for the work-space. Defaults to the value returned by the config.contract_workspace() function. include: If set, comma-separated list of include folders. libs: If set, comma-separated list of libraries. remove_existing: If set, overwrite any existing project. visual_studio_code: If set, open the ``VSCode``, if available. verbosity: The logging configuration. ''' project_name = utils.wslMapWindowsLinux(project_name.strip()) template = template.strip() template_dir = utils.wslMapWindowsLinux(template) if not os.path.isdir(template_dir): template_dir = os.path.join( config.eosf_dir(), TEMPLATE_CONTRACTS_DIR, template) if not os.path.isdir(template_dir): raise errors.Error(''' TemplateCreate '{}' does not exist. '''.format(template_dir)) if c_cpp_prop_path: c_cpp_prop_path = utils.wslMapWindowsLinux(c_cpp_prop_path) if os.path.exists(c_cpp_prop_path): try: with open(c_cpp_prop_path, "r") as input: c_cpp_properties = input.read() except Exception: c_cpp_properties = vscode.c_cpp_properties() else: c_cpp_properties = vscode.c_cpp_properties() c_cpp_properties = replace_templates(c_cpp_properties) if include: c_cpp_properties_json = json.loads(c_cpp_properties) c_cpp_properties_json[CONFIGURATIONS][0][INCLUDE_PATH].extend( include.split(", ")) c_cpp_properties_json[CONFIGURATIONS][0][BROWSE]["path"].extend( include.split(", ")) c_cpp_properties = json.dumps(c_cpp_properties_json, indent=4) if libs: c_cpp_properties_json = json.loads(c_cpp_properties) c_cpp_properties_json[CONFIGURATIONS][0]["libs"].extend( libs.split(", ")) c_cpp_properties = json.dumps(c_cpp_properties_json, indent=4) split = os.path.split(project_name) if os.path.isdir(split[0]): project_dir = project_name project_name = split[1] else: if not workspace_dir \ or not os.path.isabs(workspace_dir) \ or not os.path.exists(workspace_dir): workspace_dir = config.contract_workspace() workspace_dir = workspace_dir.strip() project_dir = os.path.join(workspace_dir, project_name) if os.path.isdir(project_dir): if os.listdir(project_dir): if remove_existing: try: shutil.rmtree(project_dir) except Exception as e: raise errors.Error(''' Cannot remove the directory {}. error message: ============== {} '''.format(project_dir, str(e))) else: msg = ''' NOTE: Contract workspace '{}' already exists. Cannot overwrite it. '''.format(project_dir) if throw_exists: raise errors.Error(msg) else: raise errors.Error(msg) return try: # make contract directory and its build directory: os.makedirs(os.path.join(project_dir, "build")) except Exception as e: raise errors.Error(str(e)) def copy_dir_contents( project_dir, template_dir, directory, project_name): contents = os.listdir(os.path.join(template_dir, directory)) for item in contents: path = os.path.join(directory, item) template_path = os.path.join(template_dir, path) contract_path = os.path.join( project_dir, path.replace( TEMPLATE_NAME, project_name)) if os.path.isdir(template_path): os.mkdir(contract_path) copy_dir_contents( project_dir, template_dir, path, project_name) elif os.path.isfile(template_path): copy(template_path, contract_path, project_name) def copy(template_path, contract_path, project_name): with open(template_path, "r") as input: template = input.read() if TEMPLATE_HOME in template or TEMPLATE_ROOT in template: home = os.environ["HOME"] root = "" if is_windows_ubuntu(): replace_templates(template) template = template.replace("${" + TEMPLATE_NAME + "}", project_name) template = template.replace(C_CPP_PROP, c_cpp_properties) template = template.replace(TASK_JSON, vscode.TASKS) with open(contract_path, "w") as output: output.write(template) copy_dir_contents(project_dir, template_dir, "", project_name) logger.TRACE(''' * Contract project '{}' created from template '{}' '''.format(project_name, template_dir), verbosity) if open_vscode: if is_windows_ubuntu(): command_line = "cmd.exe /C code {}".format( utils.wslMapLinuxWindows(project_dir)) elif uname() == "Darwin": command_line = "open -n -b com.microsoft.VSCode --args {}".format( project_dir) else: command_line = "code {}".format(project_dir) os.system(command_line) logger.INFO(''' ######### Created contract project ``{}``, originated from template ``{}``. '''.format(project_name, template_dir), verbosity) return project_dir
def template_create(project_name, template_dir=None, workspace_dir=None, remove_existing=False, open_vscode=False, throw_exists=False): '''Given the project name and template name, create a smart contract project. ''' project_name = project_name.strip() template_dir = template_dir.strip() template_dir = utils.wslMapWindowsLinux(template_dir) if not template_dir: template_dir = config.DEFAULT_TEMPLATE if not os.path.isdir(template_dir): template_dir = os.path.join(config.eosf_dir(), TEMPLATE_CONTRACTS_DIR, template_dir) if not os.path.isdir(template_dir): raise errors.Error(''' TemplateCreate '{}' does not exist. '''.format(template_dir)) if not workspace_dir \ or not os.path.isabs(workspace_dir) \ or not os.path.exists(workspace_dir): workspace_dir = config.contract_workspace() workspace_dir = workspace_dir.strip() project_name = utils.wslMapWindowsLinux(project_name.strip()) split = os.path.split(project_name) if os.path.isdir(split[0]): project_dir = project_name project_name = split[1] else: project_dir = os.path.join(workspace_dir, project_name) if os.path.isdir(project_dir): if os.listdir(project_dir): if remove_existing: try: shutil.rmtree(project_dir) except Exception as e: raise errors.Error(str(e)) else: msg = ''' NOTE: Contract workspace '{}' already exists. Cannot overwrite it. '''.format(project_dir) if throw_exists: raise errors.Error(msg) else: logger.ERROR(msg) return try: # make contract directory and its build directory: os.makedirs(os.path.join(project_dir, "build")) except Exception as e: raise errors.Error(str(e)) def copy_dir_contents(project_dir, template_dir, directory, project_name): contents = os.listdir(os.path.join(template_dir, directory)) for item in contents: path = os.path.join(directory, item) template_path = os.path.join(template_dir, path) contract_path = os.path.join( project_dir, path.replace(TEMPLATE_NAME, project_name)) if os.path.isdir(template_path): os.mkdir(contract_path) copy_dir_contents(project_dir, template_dir, path, project_name) elif os.path.isfile(template_path): copy(template_path, contract_path, project_name) def copy(template_path, contract_path, project_name): with open(template_path, "r") as input: template = input.read() if TEMPLATE_HOME in template or TEMPLATE_ROOT in template: home = os.environ["HOME"] root = "" eosio_dir = config.eosio_repository_dir() if is_windows_ubuntu(): home = config.wsl_root() + home root = config.wsl_root() eosio_dir = config.wsl_root() + eosio_dir template = template.replace(TEMPLATE_HOME, home) template = template.replace(TEMPLATE_ROOT, root) template = template.replace(TEMPLATE_EOSIO_DIR, eosio_dir) template = template.replace("@" + TEMPLATE_NAME + "@", project_name) with open(contract_path, "w") as output: output.write(template) copy_dir_contents(project_dir, template_dir, "", project_name) logger.TRACE(''' * Contract project '{}' created from template '{}' '''.format(project_name, project_dir)) if open_vscode: if is_windows_ubuntu(): command_line = "cmd.exe /C code {}".format( utils.wslMapLinuxWindows(project_dir)) elif uname() == "Darwin": command_line = "open -n -b com.microsoft.VSCode --args {}".format( project_dir) else: command_line = "code {}".format(project_dir) os.system(command_line) return project_dir