All files OracleContract.ts

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

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                                                                    3x 7x 7x 7x 7x 7x 7x       4x     4x               4x               3x     7x      
import {
    Bool,
    CircuitString,
    Field,
    PublicKey,
    SmartContract,
    UInt64,
    ProvablePure,
    provablePure,
    Account,
    method,Permissions,
    VerificationKey,
    AccountUpdate,
    state,
    State,
    Experimental,
    Int64,
    Mina,
} from 'o1js';
 
 
export type Erc677Receiver = {
 
    onTokenTransfer(sender: PublicKey, value: UInt64, data: CircuitString): Bool; // emits "Transfer" event
 
};
 
 
export class OracleContract extends SmartContract implements Erc677Receiver {
 
      /**
   * This deploy method lets a another token account deploy their zkApp and verification key as a child of this token contract.
   * This is important since we want the native token id of the deployed zkApp to be the token id of the token contract.
   */
  @method deployZkapp(address: PublicKey, verificationKey: VerificationKey) {
    let tokenId = this.token.id;
    let zkapp = AccountUpdate.defaultAccountUpdate(address, tokenId);
    this.approve(zkapp);
    zkapp.account.permissions.set(Permissions.default());
    zkapp.account.verificationKey.set(verificationKey);
    zkapp.requireSignature();
  }
 
  init() {
      super.init();
 
      // mint the entire supply to the token account with the same address as this contract
      let address = this.address;
      // pay fees for opened account
    //   this.balance.subInPlace(Mina.accountCreationFee());
 
      // since this is the only method of this zkApp that resets the entire state, provedState: true implies
      // that this function was run. Since it can be run only once, this implies it was run exactly once
 
      // make account non-upgradable forever
      this.account.permissions.set({
          ...Permissions.default(),
          editState: Permissions.proofOrSignature(),
          receive: Permissions.proof(),
          access: Permissions.proofOrSignature(),
      });
  }
 
    @method onTokenTransfer(sender: PublicKey, value: UInt64, data: CircuitString): Bool {
        // Call Oracle ID
 
        return Bool(true);
    }
 
}