无法构建StarkNet合约(疑似宏或版本兼容性问题)
解决StarkNet Cairo合约编译"Unsupported attribute"错误
问题分析
出现Unsupported attribute错误,核心原因是Scarb未正确加载StarkNet合约插件,或是版本不兼容导致无法识别#[starknet::contract]和#[storage]这类StarkNet专属属性。
解决方案
1. 检查并修正Scarb.toml配置
确保你的Scarb.toml文件包含StarkNet插件依赖和正确的target配置,示例如下:
[package] name = "counter" version = "0.1.0" [dependencies] starknet = ">=2.0.0" [[target.starknet-contract]]
根据你使用的Cairo版本,调整starknet依赖的版本号,确保与Scarb版本兼容(比如Scarb 2.0.x对应starknet 2.0.x)。
2. 确认Scarb和插件版本兼容
执行以下命令查看当前Scarb版本:
scarb --version
确认对应版本的StarkNet插件兼容性,避免版本不匹配。
3. 清理缓存并重新构建
执行以下命令清理Scarb缓存,再重新编译:
scarb clean scarb build
补充验证
确保你的合约代码结构正确,完整的计数器合约示例供参考:
#[starknet::contract] pub mod counter_contract { #[storage] struct Storage { count: u128, } #[constructor] fn constructor(ref self: ContractState) { self.count.write(0); } #[external(v0)] fn increment(ref self: ContractState) { let current = self.count.read(); self.count.write(current + 1); } #[external(v0)] fn get_count(self: @ContractState) -> u128 { self.count.read() } }
内容的提问来源于stack exchange,提问作者Harshit Chauhan
相关产品推荐
相关产品推荐

