UNPKG

@nori-zk/proof-conversion

Version:

Verifying zkVM proofs inside o1js circuits, to generate Mina compatible proof

95 lines 4.5 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { Field, PrivateKey, SmartContract, State, method, state, Poseidon, Bytes, PublicKey, } from 'o1js'; import { BlobstreamMerkleWitness, BlobstreamProcessor, } from './blobstream_contract.js'; import { BatcherProof } from './batcher.js'; export const adminPrivateKey = PrivateKey.fromBase58('EKFcef5HKXAn7V2rQntLiXtJr15dkxrsrQ1G4pnYemhMEAWYbkZW'); export const adminPublicKey = adminPrivateKey.toPublicKey(); class BatcherProofType extends BatcherProof { } export class StateBytes extends Bytes(32) { } export class HelloWorldRollup extends SmartContract { constructor() { super(...arguments); this.rollupState = State(); this.blobstreamAddress = State(); this.blobInclusionVkHash = State(); this.batcherVkHash = State(); } init() { super.init(); this.rollupState.set(Poseidon.hashPacked(Field, Field.from(0n))); this.account.delegate.set(adminPublicKey); } async setParameters(admin, blobstreamAddress, blobInclusionVkHash, batcherVkHash) { this.blobstreamAddress.set(blobstreamAddress); this.blobInclusionVkHash.set(blobInclusionVkHash); this.batcherVkHash.set(batcherVkHash); const adminPk = admin.toPublicKey(); this.account.delegate.requireEquals(adminPk); } async update(admin, pathInBlobstream, batcherProof) { const blobstreamAddress = this.blobstreamAddress.get(); this.blobstreamAddress.requireEquals(blobstreamAddress); const blobstreamContract = new BlobstreamProcessor(this.blobstreamAddress.get()); const blobstreamRoot = blobstreamContract.commitmentsRoot.get(); blobstreamContract.commitmentsRoot.requireEquals(blobstreamRoot); batcherProof.verify(); pathInBlobstream .calculateRoot(Poseidon.hash([...batcherProof.publicOutput.dataCommitment.toFields()])) .assertEquals(blobstreamRoot); const currentState = this.rollupState.getAndRequireEquals(); currentState.assertEquals(batcherProof.publicOutput.initialStateHash); this.rollupState.set(batcherProof.publicOutput.currentStateHash); const blobInclusionVkHash = this.blobInclusionVkHash.get(); this.blobInclusionVkHash.requireEquals(blobInclusionVkHash); blobInclusionVkHash.assertEquals(batcherProof.publicInput.blobInclusionVkHash); const batcherVkHash = this.batcherVkHash.get(); this.batcherVkHash.requireEquals(batcherVkHash); batcherVkHash.assertEquals(batcherProof.publicInput.batcherVkHash); const adminPk = admin.toPublicKey(); this.account.delegate.requireEquals(adminPk); } } __decorate([ state(Field), __metadata("design:type", Object) ], HelloWorldRollup.prototype, "rollupState", void 0); __decorate([ state(PublicKey), __metadata("design:type", Object) ], HelloWorldRollup.prototype, "blobstreamAddress", void 0); __decorate([ state(Field), __metadata("design:type", Object) ], HelloWorldRollup.prototype, "blobInclusionVkHash", void 0); __decorate([ state(Field), __metadata("design:type", Object) ], HelloWorldRollup.prototype, "batcherVkHash", void 0); __decorate([ method, __metadata("design:type", Function), __metadata("design:paramtypes", [PrivateKey, PublicKey, Field, Field]), __metadata("design:returntype", Promise) ], HelloWorldRollup.prototype, "setParameters", null); __decorate([ method, __metadata("design:type", Function), __metadata("design:paramtypes", [PrivateKey, BlobstreamMerkleWitness, BatcherProofType]), __metadata("design:returntype", Promise) ], HelloWorldRollup.prototype, "update", null); //# sourceMappingURL=rollup.js.map