UNPKG

l1-lottery-contracts

Version:

This repo contains smart contracts and related scripts for ZkNoid L1 Lottery proposed [here](https://forums.minaprotocol.com/t/zknoid-l1-lottery/6269)

2 lines (1 loc) 5.53 kB
import{Field as c,MerkleMap as Z,Poseidon as b,PublicKey as U,SmartContract as K,State as h,Struct as D,UInt32 as O,ZkProgram as L,method as R,state as m}from\"o1js\";import{PublicKey as v,UInt64 as M}from\"o1js\";var Q=M.from(10*10**9),q=480;var Y=v.fromBase58(\"B62qnBkcyABfjz2cqJPzNZKjVt9M9kx1vgoiWLbkJUnk16Cz8KX8qC4\"),E=v.fromBase58(\"B62qnmsn4Bm4MzPujKeN1faxedz4p1cCAwA9mKAWzDjfb4c1ysVvWeK\");import{ZkonZkProgram as W,ZkonRequestCoordinator as S,ExternalRequestEvent as A}from\"zkon-zkapp\";import{Field as y,Provable as x,provable as V,Struct as z,UInt32 as f,UInt64 as rt}from\"o1js\";import{StringCircuitValue as P}from\"zkon-zkapp\";var I=\"bafkreihvrf5ftl7vslg6frpdtqqjiju3q3sllojlcasldpklqt5b6wfrlm\";var T=254n,_=7,B=32n;function H(i,t,r){if(r*BigInt(t)>T)throw new Error(\"The Packing Plant is only accepting orders that can fit into one Field, try using MultiPackingPlant\");class s extends z({packed:y}){constructor(e){super({packed:e})}static extractField(e){throw new Error(\"Must implement extractField\")}static sizeInBits(){throw new Error(\"Must implement sizeInBits\")}static unpack(e){throw new Error(\"Must implement unpack\")}static checkPack(e){if(e.length>t)throw new Error(`Input of size ${e.length} is larger than expected size of ${t}`)}static pack(e){this.checkPack(e);let o=this.extractField(e[0]),l=Math.min(e.length,t);for(let d=1;d<l;d++){let j=y((2n**this.sizeInBits())**BigInt(d));o=o.add(this.extractField(e[d]).mul(j))}return o}static unpackToBigints(e){let o=new Array(t);o.fill(0n);let l;if(e)l=e.toBigInt();else throw new Error(\"No Packed Value Provided\");for(let d=0;d<t;d++)o[d]=l&(1n<<this.sizeInBits())-1n,l>>=this.sizeInBits();return o}toFields(){return[this.packed]}assertEquals(e){this.packed.assertEquals(e.packed)}}return s.type=V({packed:y},{}),s.l=t,s.bitSize=r,s}function N(i=_){class t extends H(f,i,B){static extractField(s){return s.value}static sizeInBits(){return B}static unpack(s){let n=x.witness(x.Array(f,i),()=>this.unpackToBigints(s).map(o=>f.from(o)));return s.assertEquals(t.pack(n)),n}static fromUInt32s(s){let n=t.pack(s);return new t(n)}static fromBigInts(s){let n=s.map(e=>f.from(e));return t.fromUInt32s(n)}toBigInts(){return t.unpack(this.packed).map(s=>s.toBigint())}}return t}var w=class extends N(){};var C=()=>{function i(t){let r=t.slice(0,30),s=t.slice(30),n=new P(r).toField(),e=new P(s).toField();return{hashPart1:n,hashPart2:e}}return i(I.toString())};var p=function(i,t,r,s){var n=arguments.length,e=n<3?t:s===null?s=Object.getOwnPropertyDescriptor(t,r):s,o;if(typeof Reflect==\"object\"&&typeof Reflect.decorate==\"function\")e=Reflect.decorate(i,t,r,s);else for(var l=i.length-1;l>=0;l--)(o=i[l])&&(e=(n<3?o(e):n>3?o(t,r,e):o(t,r))||e);return n>3&&e&&Object.defineProperty(t,r,e),e},a=function(i,t){if(typeof Reflect==\"object\"&&typeof Reflect.metadata==\"function\")return Reflect.metadata(i,t)},pt=new Z().getRoot(),G=L.Proof(W),k=class extends G{},g=class extends D({value:c,salt:c}){hash(){return b.hash([this.value,this.salt])}},{hashPart1:J,hashPart2:X}=C(),F=E,dt=U.fromBase58(\"B62qjGsPY47SMkTykivPBAU3riS9gvMMrGr7ve6ynoHJNBzAhQmtoBn\"),u=class extends K{constructor(){super(...arguments),this.startSlot=h(),this.commit=h(),this.result=h(),this.curRandomValue=h(),this.ipfsHash1=h(),this.ipfsHash2=h(),this.events={requested:A}}init(){super.init(),this.ipfsHash1.set(J),this.ipfsHash2.set(X)}async commitValue(t){this.permissionCheck(),this.commit.getAndRequireEquals().assertEquals(c(0),\"Already committed\"),this.commit.set(t.hash()),await this.callZkon()}async reveal(t){this.permissionCheck(),this.result.getAndRequireEquals().assertEquals(c(0),\"reveal: Result already computed\");let s=this.curRandomValue.getAndRequireEquals();this.commit.getAndRequireEquals().assertEquals(t.hash(),\"reveal: wrong commit value\"),this.checkRoundPass();let e=b.hash([t.value,s]);this.result.set(e)}async callZkon(){let t=this.ipfsHash1.getAndRequireEquals(),r=this.ipfsHash2.getAndRequireEquals();this.curRandomValue.getAndRequireEquals().assertEquals(c(0),\"random value have already been computed\");let e=await new S(F).sendRequest(this.address,t,r),o=new A({id:e,hash1:t,hash2:r});this.emitEvent(\"requested\",o)}async receiveZkonResponse(t,r){this.curRandomValue.getAndRequireEquals().assertEquals(c(0),\"receiveZkonResponse: prev random value was not consumed. Call reveal first\"),await new S(F).recordRequestFullfillment(t,r),this.curRandomValue.set(r.publicInput.dataField)}permissionCheck(){}checkRoundPass(){let t=this.startSlot.getAndRequireEquals();this.network.globalSlotSinceGenesis.requireBetween(t.add(q),O.MAXINT())}};p([m(O),a(\"design:type\",Object)],u.prototype,\"startSlot\",void 0);p([m(c),a(\"design:type\",Object)],u.prototype,\"commit\",void 0);p([m(c),a(\"design:type\",Object)],u.prototype,\"result\",void 0);p([m(c),a(\"design:type\",Object)],u.prototype,\"curRandomValue\",void 0);p([m(c),a(\"design:type\",Object)],u.prototype,\"ipfsHash1\",void 0);p([m(c),a(\"design:type\",Object)],u.prototype,\"ipfsHash2\",void 0);p([R,a(\"design:type\",Function),a(\"design:paramtypes\",[g]),a(\"design:returntype\",Promise)],u.prototype,\"commitValue\",null);p([R,a(\"design:type\",Function),a(\"design:paramtypes\",[g]),a(\"design:returntype\",Promise)],u.prototype,\"reveal\",null);p([R,a(\"design:type\",Function),a(\"design:paramtypes\",[c,k]),a(\"design:returntype\",Promise)],u.prototype,\"receiveZkonResponse\",null);var ht=u;export{g as CommitValue,u as RandomManager,k as ZkonProof,G as ZkonProof_,ht as default};