All files / src/plugins badgeproof.ts

100% Statements 17/17
100% Branches 0/0
100% Functions 3/3
100% Lines 17/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71  27x 27x 27x 27x     27x 27x                                   16x     16x       16x     16x     16x               14x 14x 14x       27x                 14x 14x              
export {
  BadgeData,
  BadgeDataWitness,
  MinaNFTBadgeCalculation,
  MinaNFTBadgeProof,
};
 
import { Field, ZkProgram, Struct } from "o1js";
import { Metadata, MetadataWitness } from "../contract/metadata";
 
class BadgeDataWitness extends Struct({
  root: Metadata,
  value: Metadata,
  key: Field,
  witness: MetadataWitness,
}) {}
 
class BadgeData extends Struct({
  root: Metadata,
  data: Metadata,
  key: Field,
}) {
  // TODO: remove comments from key validation after https://github.com/o1-labs/o1js/issues/1552
 
  static create(badgeDataWitness: BadgeDataWitness) {
    const [dataWitnessRootBefore, dataWitnessKey] =
      badgeDataWitness.witness.data.computeRootAndKey(
        badgeDataWitness.value.data
      );
    badgeDataWitness.root.data.assertEquals(dataWitnessRootBefore);
    //dataWitnessKey.assertEquals(badgeDataWitness.key);
 
    const [kindWitnessRootBefore, kindWitnessKey] =
      badgeDataWitness.witness.kind.computeRootAndKey(
        badgeDataWitness.value.kind
      );
    badgeDataWitness.root.kind.assertEquals(kindWitnessRootBefore);
    //kindWitnessKey.assertEquals(badgeDataWitness.key);
 
    return new BadgeData({
      root: badgeDataWitness.root,
      data: badgeDataWitness.value,
      key: badgeDataWitness.key,
    });
  }
 
  static assertEquals(data1: BadgeData, data2: BadgeData) {
    Metadata.assertEquals(data1.root, data2.root);
    Metadata.assertEquals(data1.data, data2.data);
    data1.key.assertEquals(data2.key);
  }
}
 
const MinaNFTBadgeCalculation = ZkProgram({
  name: "MinaNFTBadgeCalculation",
  publicInput: BadgeData,
 
  methods: {
    create: {
      privateInputs: [BadgeDataWitness],
 
      async method(state: BadgeData, badgeDataWitness: BadgeDataWitness) {
        const computedState = BadgeData.create(badgeDataWitness);
        BadgeData.assertEquals(computedState, state);
      },
    },
  },
});
 
class MinaNFTBadgeProof extends ZkProgram.Proof(MinaNFTBadgeCalculation) {}