You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

StarkNet合约声明报错:必填字段缺失等ValidationError问题求助

解决Starknet合约声明时的ValidationError问题

问题详情

  • 操作:参照Cairo官方Hello Starknet示例编写合约,执行合约声明命令
  • 执行命令:
    starknet declare --contract contract_compiled.json
    
    或带网络与账户参数的命令:
    starknet declare --contract contract_compiled.json --network alpha-goerli --account __default__
    
  • 报错信息:

    {'contract_class_version': ['Missing data for required field.'], 'entry_points_by_type': defaultdict(<class 'dict'>, {'EXTERNAL': {'value': {0: {'function_idx': ['Missing data for required field.'], 'offset': ['Unknown field.']}, 1: {'function_idx': ['Missing data for required field.'], 'offset': ['Unknown field.']}}}}), 'program': ['Unknown field.']}

  • 账户状态:持有0.00381910303249468 ETH,测试网地址可正常查询

问题原因

该错误是合约编译版本与starknet-cli版本不兼容导致的:

  • 旧版Cairo编译器(如0.10.x及更早)输出v0格式合约文件,缺少contract_class_version字段,且entry_points_by_type结构、program字段均不符合新版starknet-cli要求。
  • 新版starknet-cli要求合约遵循Starknet合约类v1格式,该格式新增contract_class_version字段,用sierra_program和casm_program替代旧的program字段,同时entry_points_by_type结构也有调整。

解决方案

1. 升级Cairo与starknet-cli版本

先检查当前工具版本:

cairo-compile --version
starknet --version

通过pip升级到最新稳定版(若使用虚拟环境,需先激活对应环境):

pip install --upgrade cairo-lang starknet-devnet

2. 重新编译合约

使用新版编译器重新编译合约源码(假设源码文件为hello_starknet.cairo):

starknet-compile hello_starknet.cairo --output contract_compiled.json

编译后的新文件会自动包含contract_class_version字段,结构完全符合新版cli要求。

3. 重新执行声明命令

再次运行合约声明命令,注意新版cli的网络参数已更新为goerli(替代旧的alpha-goerli):

starknet declare --contract contract_compiled.json --network goerli --account __default__

若__default__账户未正确配置,可替换为具体账户名称。

额外注意

如果合约代码基于旧版Cairo(0.10.x及更早)编写,需要适配新版Cairo(1.0+)的语法规范,否则编译会失败,可参照官方文档最新示例调整代码。

内容的提问来源于stack exchange,提问作者guhao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:42:51