{"record":{"id":"a15872ffbbb67f43","repo":"diem/diem","slug":"invalid-entrypoint","errorCode":null,"errorMessage":"Invalid entrypoint: {}","messagePattern":"Invalid entrypoint: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"language/move-prover/interpreter/src/lib.rs","lineNumber":70,"sourceCode":"    #[structopt(long = \"args\", parse(try_from_str = parse_transaction_argument))]\n    pub args: Vec<TransactionArgument>,\n    /// Possibly-empty list of type arguments passed to the transaction (e.g., `T` in\n    /// `main<T>()`). Must match the type arguments kinds expected by `script_file`.\n    #[structopt(long = \"ty-args\", parse(try_from_str = parse_type_tag))]\n    pub ty_args: Vec<TypeTag>,\n\n    /// Skip checking of expressions\n    #[structopt(long = \"no-expr-check\")]\n    pub no_expr_check: bool,\n    /// Level of verbosity\n    #[structopt(short = \"v\", long = \"verbose\")]\n    pub verbose: Option<u64>,\n}\n\nfn parse_entrypoint(input: &str) -> Result<(ModuleId, Identifier)> {\n    let tokens: Vec<_> = input.split(\"::\").collect();\n    if tokens.len() != 3 {\n        bail!(\"Invalid entrypoint: {}\", input);\n    }\n    let module_id = ModuleId::new(\n        AccountAddress::from_hex_literal(tokens[0])?,\n        Identifier::new(tokens[1])?,\n    );\n    let func_name = Identifier::new(tokens[2])?;\n    Ok((module_id, func_name))\n}\n\n#[derive(Debug, Eq, PartialEq)]\nstruct ExecutionResult {\n    vm_result: VMResult<Vec<TypedValue>>,\n    global_state: GlobalState,\n}\n\n//**************************************************************************************************\n// Entry\n//**************************************************************************************************","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/diem/diem/blob/fc4714a8ea273b6efe8b13dbce72ea60aad9a16c/language/move-prover/interpreter/src/lib.rs#L52-L88","documentation":"The Move Prover's entrypoint parser expects a fully-qualified function name with exactly three '::'-separated segments: <address>::<module_name>::<function_name>. This error means the string passed as the entrypoint did not split into exactly 3 parts.","triggerScenarios":"Calling the prover CLI/boogie benchmark runner with an entrypoint like '0x1::M' (2 segments) or 'a::b::c::d' (4 segments); passing a bare function name or a path-like string.","commonSituations":"Typing a module instead of a function, forgetting the address prefix, or scripting the prover with extra :: segments from a partially qualified name.","solutions":["Pass the entrypoint as three '::'-separated segments, e.g. '0x1::M::f'.","Check that the address is a hex literal like 0x1 and the module/function names are valid identifiers.","Quote the entrypoint in your shell so '::' is not mangled."],"exampleFix":"// before\nlet ep = \"0x1::MyModule\";\n// after\nlet ep = \"0x1::MyModule::my_function\";","handlingStrategy":"validation","validationCode":"fn valid_entrypoint(ep: &str) -> bool { ep.split(\"::\").count() == 3 }\nassert!(valid_entrypoint(\"0x1::M::f\"));","typeGuard":null,"tryCatchPattern":"match parse_entrypoint(ep) {\n    Ok((module, name)) => run(module, name),\n    Err(e) => eprintln!(\"bad --entrypoint '{}': {}\", ep, e),\n}","preventionTips":["Always pass entrypoints as <address>::<module>::<function>.","Quote entrypoint arguments in shell scripts.","Validate the address is a hex literal (0x...) before invoking the prover."],"tags":["move-prover","cli","argument-parsing"],"backgroundTag":"invalid-input-format","analyzedSha":"fc4714a8ea273b6efe8b13dbce72ea60aad9a16c","analyzedAt":"2026-09-04T21:07:05.890Z","contentChangedAt":"2026-09-04T21:07:05.890Z","schemaVersion":2},"datasetVersion":"2026-09-12T02:17:10.037Z"}