使用Starknet.js 0.4.9部署预资助OZ账户报错求助
问题解决:部署OpenZeppelin 0.5.0账户合约时入口点找不到报错
错误原因
核心问题是Starknet.js版本与OpenZeppelin账户合约版本不兼容:
- Starknet.js 0.4.9适配的是旧版(0.4.x系列)OpenZeppelin账户合约,调用
deployAccount时会触发旧验证入口点__validate__(对应哈希就是报错中的0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895)。 - OpenZeppelin 0.5.0版本的账户合约已改用新验证入口点(
__validate_deploy_account__和__validate_declare__),不再包含旧的__validate__入口点,因此出现“入口点未找到”的报错。
解决方案
方案1:升级Starknet.js到兼容版本
将Starknet.js升级至支持OpenZeppelin 0.5.0账户合约的版本(建议使用0.5.x及以上版本):
- 执行升级命令:
# npm npm install starknet@^0.5.0 # yarn yarn add starknet@^0.5.0
- 升级后,原有的
deployAcc函数无需修改,新版本Starknet.js会自动调用正确的入口点完成部署。
方案2:改用对应版本的OpenZeppelin账户合约
若不想升级Starknet.js,需替换当前的ACC_CLASS_HASH为与Starknet.js 0.4.9兼容的OpenZeppelin 0.4.x版本账户合约类哈希(可在OpenZeppelin官方文档或Goerli Alpha网络合约注册表中获取),替换后原calcAddress和deployAcc函数可正常使用。
额外验证点
你的预计算地址逻辑是正确的:0.5.0版本OpenZeppelin账户合约的构造函数仅需传入公钥(starkKeyPub),calcAddress中calculateContractAddressFromHash的参数[starkKeyPub]符合要求,无需调整。
内容的提问来源于stack exchange,提问作者bleaknight
相关产品推荐
相关产品推荐

