minauth-erc721-timelock-plugin
Version:
This package contains an implementation of a MinAuth plugin that combines zero-knowledge Merkle "membership" proofs with the ability to register into to a Merkle tree with locking an Ethereum NFT.
33 lines • 1.07 kB
JavaScript
import { Field, MerkleWitness, Poseidon, Struct, ZkProgram } from 'o1js';
// TODO how can this be made dynamic
export const TREE_HEIGHT = 10;
export class TreeWitness extends MerkleWitness(TREE_HEIGHT) {
}
export class PrivateInput extends Struct({
witness: TreeWitness,
secret: Field
}) {
}
export class PublicInput extends Struct({
merkleRoot: Field
}) {
}
/** Prove knowledge of a preimage of a hash in a merkle tree.
* The proof reveals nothing, but the merkle root.
*/
export const MerkleMembershipProgram = ZkProgram({
name: 'MerkleMembership',
publicInput: PublicInput,
methods: {
proveMembership: {
privateInputs: [PrivateInput],
method(publicInput, privateInput) {
privateInput.witness
.calculateRoot(Poseidon.hash([privateInput.secret]))
.assertEquals(publicInput.merkleRoot);
}
}
}
});
export const MerkleMembershipProof = ZkProgram.Proof(MerkleMembershipProgram);
//# sourceMappingURL=merkle-membership-program.js.map