使用ManifestBuilder.create_fungible_resource创建可替代资源遇权限错误求助
问题解决:ManifestBuilder调用deposit_batch触发AuthError
错误原因分析
你遇到的AuthError并非来自create_fungible_resource的OwnerRole配置,而是调用账户deposit_batch方法时缺少所有者证明。错误日志中fn_identifier明确指向Account:deposit_batch,说明权限验证失败发生在这个方法调用环节——账户的deposit_batch默认要求调用者提供账户所有者身份的证明,你的manifest未包含该步骤,因此触发权限拦截。
解决方案
需要在manifest中添加生成账户所有者证明的步骤,同时修正代码中的语法错误:
- 添加所有者证明生成步骤:在调用
deposit_batch前,使用create_proof_of_address生成目标账户的所有者证明,满足方法的权限要求。 - 修复语法错误:你的代码中
Some(dec!("1000000")缺少闭合括号),需补充完整。
修正后的代码
let manifest = ManifestBuilder::new() .lock_fee(FAUCET_COMPONENT, dec!("10")) .create_fungible_resource( OwnerRole::None, false, DIVISIBILITY_MAXIMUM, FungibleResourceRoles::single_locked_rule(AccessRule::AllowAll), metadata! { init { "name" => "Token1", locked; "symbol" => "TK1", locked; } }, Some(dec!("1000000")) // 补充缺失的闭合括号 ) .create_proof_of_address(<account_address>) // 添加账户所有者证明 .call_method( <account_address>, "deposit_batch", manifest_args!(ManifestExpression::EntireWorktop) ) .build();
额外说明
- 你之前调整
OwnerRole的操作方向错误:OwnerRole控制的是新创建 fungible 资源的所有者权限,和账户方法的调用权限完全无关,因此无法解决当前问题。 create_proof_of_address会生成对应账户NonFungible身份的证明,这是调用账户核心方法(如deposit_batch、withdraw等)的通用权限验证要求。
内容的提问来源于stack exchange,提问作者Fred Liebenberg
相关产品推荐
相关产品推荐

