Skip to content

Question: Positive Accumulator Membership test #63

@ppoliani

Description

@ppoliani

I'm trying to get my head around how I can use the ECC accumulator to effectively create membership verifications. I've added the following test

    #[test]
    fn test_membership() {
      let mut rng = StdRng::seed_from_u64(0u64);
      let params = SetupParams::<Bls12_381>::generate_using_rng(&mut rng);
      let keypair = Keypair::<Bls12_381>::generate_using_rng(&mut rng, &params);
      let mut accumulator = PositiveAccumulator::initialize(&params);

      let elems = [
        Fr::from(1),
        Fr::from(2),
        Fr::from(3),
        Fr::from(4),
      ];

      for elem in elems {
        accumulator.0 = accumulator.compute_new_post_add(&elem, &keypair.secret_key);
      };

      // verify membership
      let verification_accumulator = PositiveAccumulator::from_accumulated(*accumulator.value());
      let member = &Fr::from(100);
      let wtns = verification_accumulator.compute_membership_witness(member, &keypair.secret_key);

      assert!(verification_accumulator.verify_membership(
        member,
        &wtns,
        &keypair.public_key,
        &params
      ));
    }

My assumption here is the verify_membership should fails since value 100 is not part of the elems that generate the accumulator. However, the above test simply passes. As a matter of fact it passes using an arbitrary member value.

Apparently my assumption is wrong 😆. Nonetheless, it would be nice to know if I can use this cryptographic tool to use prove membership. IBasically, want to use it instead of a Merkle Tree

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions