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;

Based on some experience working with the standard, I’ve added metadata for each individual list item. This gives the standard a bit more versatility and will allow for doing things like keeping audit records with ListItem entries.

For example, on the ICaiBus Alpha demo we added each contributor to the main list, but we had to create a new list for each account to record the contribution history. With this new update, we can just annotate the existing item’s metadata with a new entry:

Updated Standards Draft: icrc75.mo/icrc75-standardv2.md at v0.2.0 · icdevsorg/icrc75.mo · GitHub

Updated Mops Package: https://mops.one/icrc75-mo