0

I am struggling to get the .create_fungible_resource method on the ManifestBuilder working.

I have the following:

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")
   )
   .call_method(
      <account_address>,
      "deposit_batch",
      manifest_args!(ManifestExpression::EntireWorktop)
   )
   .build();

I get the following error with this code:

COMMITTED FAILURE: SystemModuleError(AuthError(Unauthorized(Unauthorized { failed_access_rules: RoleList([(RoleKey { key: "_owner_" }, [Protected(ProofRule(Require(NonFungible(ResourceAddress(9a4c6318c6318c686701820c6318c6318cf7d75139d5aad5e6318c6318c6):[d8ae76c7ce94a60f254465161b81f39b68aadea7141f45990b083cfb0f]))))])]), fn_identifier: PackageAddress(0d906318c6318c6ee313598c6318c6318cf7bcaa2e954a9626318c6318c6):<Account>:<deposit_batch> })))

It looks like it might have something to do with the owner role, but I am not sure.

I tried setting the owner role to rule!(require(RADIX_TOKEN)), but that did not change anything.

Mikko Ohtamaa
  • 82,057
  • 50
  • 264
  • 435
Fred Liebenberg
  • 101
  • 1
  • 5

1 Answers1

0

Problem is solved by changing the method for depositing the tokens from "deposit_batch" to "try_deposit_batch_or_abort" in the last call_method.

So fixed code:

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")
   )
   .call_method(
      <account_address>,
      "try_deposit_batch_or_abort",
      manifest_args!(ManifestExpression::EntireWorktop)
   )
   .build();

It can be done even better by using the built-in function of the ManifestBuilder:

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")
   )
   .try_deposit_batch_or_abort(<account_address>)
   .build();
Fred Liebenberg
  • 101
  • 1
  • 5