hyperledger / iroha-javascript

JavaScript library for Iroha, a Distributed Ledger Technology (blockchain) platform.
https://wiki.hyperledger.org/display/iroha
Apache License 2.0
94 stars 64 forks source link

Perform Permissions with Typescript SDK #163

Open lutfiblog opened 1 year ago

lutfiblog commented 1 year ago

Looking for performing permission instruction with typescript, i am not able to found documentation about it in Typescript.

0x009922 commented 1 year ago

Are you talking about Iroha 1 or Iroha 2 SDK?

lutfiblog commented 1 year ago

I am working with Iroha 2: Here are my approach:

export const setRole = async () => {
  //   let role_id = <Role as Identifiable>::Id::from_str("ACCESS_TO_MOUSE_METADATA")?;
  // let role = iroha_data_model::role::Role::new(role_id)
  //     .add_permission(CanSetKeyValueInUserMetadata::new(mouse_id))
  //     .add_permission(CanRemoveKeyValueInUserMetadata::new(mouse_id));
  // let register_role = RegisterBox::new(role);
  const role = Role({
    id: RoleId({
      name: "ACCESS_TO_PCHAIN_METADATA",
    }),
    permissions: VecToken([]),
  });

  const registerRole = RegisterBox({
    object: EvaluatesToRegistrableBox({
      expression: Expression(
        "Raw",
        Value(
          "Identifiable",
          IdentifiableBox(
            "NewRole",
            NewRole({
              inner: role,
            })
          )
        )
      ),
    }),
  });
};

export const canMintUserAsset = () => {
  const accountBox = AccountId({
    name: "lutfi",
    domain_id: DomainId({
      name: "prifa",
    }),
  });

  const assetDefinition = AssetDefinition({
    value_type: AssetValueType("Quantity"),
    id: AssetDefinitionId({
      name: "pchain",
      domain_id: DomainId({ name: "prifa" }),
    }),
    metadata: Metadata({ map: MapNameValue(new Map()) }),
    mintable: Mintable("Infinitely"), // If only we could mint more time.
  });

//   let mut genesis = RawGenesisBlock::new(
//     "alice".parse(),
//     "wonderland".parse(),
//     get_key_pair().public_key().clone(),
// );
// let rose_definition_id =
//     <AssetDefinition as Identifiable>::Id::from_str("rose#wonderland")?;
// let alice_id =
//     <Account as Identifiable>::Id::from_str("alice@wonderland")?;

// // Create a new `CanMintUserAssetDefinitions` permission token
// // to mint rose assets (`rose_definition_id`)
// let mint_rose_permission: PermissionToken =
//     CanMintUserAssetDefinitions::new(rose_definition_id).into();

// // Grant Alice permission to mint rose assets
// genesis.transactions[0]
//     .isi
//     .push(GrantBox::new(mint_rose_permission, alice_id).into());
}

The function for "PermissionToken" and "CanMintUserAssetDefinitions" not found in from "@iroha2/data-model", however i found this "FindAllPermissionTokenDefinitions"

Is there available solution to do it in Typescript? or maybe, i need to define it in genesis.json? Thanks