Starknet错误码ENTRY_POINT_NOT_FOUND_IN_CONTRACT含义及报错求助
解决StarkNet合约声明时ENTRY_POINT_NOT_FOUND_IN_CONTRACT错误
针对你遇到的合约声明阶段入口点未找到错误,以下是具体排查和解决步骤:
1. 核对Cairo版本兼容性
StarkNet不同测试网(如alpha4)对应特定Cairo版本范围,版本不匹配会导致合约结构与入口点不兼容:
- 执行命令查看本地版本:
starknet --version - 确保版本与官方文档示例要求一致(alpha4通常对应Cairo 0.10.x~0.11.x版本),若版本不符,安装指定版本:
pip install cairo-lang==0.11.0.1
2. 重新编译合约并验证结构
编译错误会导致生成的合约文件缺失声明所需入口点:
- 删除旧编译产物,重新执行官方指定编译命令:
rm contract_compiled.json cairo-compile contract.cairo --output contract_compiled.json - 打开编译后的
contract_compiled.json,检查是否存在entry_points_by_type字段,且其中包含DECLARE类型的入口点哈希(即错误信息中的0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3)。若字段缺失或不匹配,说明合约代码存在语法问题。
3. 检查合约代码合法性
确保合约代码严格遵循官方示例结构要求:
- 必须以
%lang starknet开头声明语言类型 - 包含必要的存储变量、构造函数或外部函数(即使是空实现)
- 无语法错误,比如缺失
end关键字、错误使用装饰器等
示例合法合约结构:
%lang starknet @storage_var func balance() -> (res: felt): end @constructor func constructor{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(): balance.write(1000) return () end @external func increase_balance{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(amount: felt): let (current_balance) = balance.read() balance.write(current_balance + amount) return () end
4. 确认声明命令参数正确性
执行声明命令时,确保指定正确的合约文件和网络:
starknet declare --contract contract_compiled.json --network alpha4
- 避免使用错误的合约文件路径
- 确认网络参数与文档一致(alpha4为旧测试网,若文档已更新需对应调整)
5. 清理本地账户缓存(可选)
若上述步骤无效,尝试清理StarkNet账户缓存后重新声明:
rm -rf ~/.starknet_accounts
内容的提问来源于stack exchange,提问作者0xC6D0fF1e4
相关产品推荐
相关产品推荐

