ICRC-75 - Minimal Membership Standard

This Topic is to discuss ICRC-75.

The Issue: ICRC-75 - Minimal Membership Standard · Issue #75 · dfinity/ICRC · GitHub

The Draft: icrc75.mo/icrc75-standard.md at main · icdevsorg/icrc75.mo · GitHub

Reference Motoko Module and Web Dapp Code:GitHub - icdevsorg/icrc75.mo: ICRC-75 for Motoko

Sample Dapp: https://iedms-tqaaa-aaaal-amieq-cai.icp0.io/

Mops: Mops • Motoko Package Manager

Tips:

  • Add a read permission to your list for the Anon Principal to make the list public.
  • You can make lists of Identities(principals), Values(ICRC16), Accounts(ICRC1/2), or Lists(recursive).
  • Make an SNS and admin and manage via votes. You’ll need to authorize a Generic Function Call for your SNS. The module provides a pre-built validation helper for the validation function.
  • You can request a certificate from the canister that a member is part of list and then retrieve the certificate. This can be provided to any other canister on the IC or external service that the NNS has signed the veracity of that membership.

The candid function list interface:

  icrc10_supported_standards : () -> (vec ICRC10Record) query;
  icrc75_get_list_lists : (List__1, opt List__1, opt nat) -> (
      vec List__1,
    ) query;
  icrc75_get_list_members_admin : (List__1, opt ListItem__1, opt nat) -> (
      vec ListItem__1,
    ) query;
  icrc75_get_list_permissions_admin : (
      List__1,
      opt Permission__1,
      opt PermissionListItem__1,
      opt nat,
    ) -> (PermissionList__1) query;
  icrc75_get_lists : (opt text, bool, opt List__1, opt nat) -> (
      vec ListRecord,
    ) query;
  icrc75_get_stats : () -> (Stats) query;
  icrc75_is_member : (vec AuthorizedRequestItem) -> (vec bool) query;
  icrc75_manage : (ManageRequest) -> (ManageResponse);
  icrc75_manage_list_membership : (ManageListMembershipRequest) -> (
      ManageListMembershipResponse,
    );
  icrc75_manage_list_properties : (ManageListPropertyRequest) -> (
      ManageListPropertyResponse,
    );
  icrc75_member_of : (ListItem__1, opt List__1, opt nat) -> (vec List__1) query;
  icrc75_metadata : () -> (DataItemMap) query;
  icrc75_request_token : (ListItem__1, List__1, opt nat) -> (
      IdentityRequestResult,
    );
  icrc75_retrieve_token : (IdentityToken) -> (IdentityCertificate) query;