All files / src/contract transfer.ts

100% Statements 7/7
100% Branches 0/0
100% Functions 1/1
100% Lines 7/7

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 4327x                   27x   27x         27x                         47x     47x           27x      
import {
  Field,
  ZkProgram,
  Struct,
  Signature,
  PublicKey,
  Poseidon,
  Bool,
} from "o1js";
 
import { EscrowApproval } from "./escrow";
 
export class EscrowTransferApproval extends Struct({
  approval: EscrowApproval,
  owner: Field,
}) {}
 
export const EscrowTransferVerification = ZkProgram({
  name: "EscrowTransferVerification",
  publicInput: EscrowTransferApproval,
 
  methods: {
    check: {
      privateInputs: [Signature, PublicKey],
 
      async method(
        data: EscrowTransferApproval,
        signature: Signature,
        publicKey: PublicKey
      ) {
        signature
          .verify(publicKey, EscrowApproval.toFields(data.approval))
          .assertEquals(Bool(true));
        data.owner.assertEquals(Poseidon.hash(publicKey.toFields()));
      },
    },
  },
});
 
export class EscrowTransferProof extends ZkProgram.Proof(
  EscrowTransferVerification
) {}