UNPKG

@nori-zk/ethprocessor

Version:

zkApp for verifying SP1 Helios Nori proof and storing latest execution state root on Mina

79 lines 3.53 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, UInt64, PublicKey, Permissions, } from 'o1js'; import { EthProof, Bytes32 } from './EthVerifier.js'; import 'dotenv/config'; let ADMIN_PRIVATE_KEY = process.env.ADMIN_PRIVATE_KEY; if (!ADMIN_PRIVATE_KEY) { console.log('ADMIN_PRIVATE_KEY not set, using random key'); ADMIN_PRIVATE_KEY = PrivateKey.random().toBase58(); } export const adminPrivateKey = PrivateKey.fromBase58(ADMIN_PRIVATE_KEY); export const adminPublicKey = adminPrivateKey.toPublicKey(); export class EthProofType extends EthProof { } export class EthProcessor extends SmartContract { constructor() { super(...arguments); this.verifiedStateRoot = State(); // todo make PackedString this.latestHead = State(); this.admin = State(); } // @state(Field) latestHeliusStoreInputHash = State<Field>(); //todo // events = { 'executionStateRoot-set': Bytes32.provable };//todo change type, if events even possible init() { super.init(); this.admin.set(adminPublicKey); this.latestHead.set(UInt64.from(0)); this.verifiedStateRoot.set(Field(1)); this.account.permissions.set({ ...Permissions.default(), }); } //TODO deploy (for redeployments) ? // async deploy(args: DeployArgs) { // super.deploy(args); // this.verifiedStateRoot.set(Field(2)); // } // @method async init() { // this.account.provedState.getAndRequireEquals(); // this.account.provedState.get().assertFalse(); // super.init(); // } async update(ethProof) { const currentHead = this.latestHead.getAndRequireEquals(); const proofHead = ethProof.publicInput.newHead; const executionStateRoot = ethProof.publicInput.executionStateRoot; proofHead.assertGreaterThan(currentHead, 'Proof head must be greater than current head'); ethProof.verify(); this.latestHead.set(proofHead); this.verifiedStateRoot.set(Poseidon.hashPacked(Bytes32.provable, executionStateRoot)); // this.emitEvent('executionStateRoot-set', executionStateRoot); } } __decorate([ state(Field), __metadata("design:type", Object) ], EthProcessor.prototype, "verifiedStateRoot", void 0); __decorate([ state(UInt64), __metadata("design:type", Object) ], EthProcessor.prototype, "latestHead", void 0); __decorate([ state(PublicKey), __metadata("design:type", Object) ], EthProcessor.prototype, "admin", void 0); __decorate([ method, __metadata("design:type", Function), __metadata("design:paramtypes", [EthProofType]), __metadata("design:returntype", Promise) ], EthProcessor.prototype, "update", null); //# sourceMappingURL=EthProcessor.js.map