@nori-zk/proof-conversion
Version:
Verifying zkVM proofs inside o1js circuits, to generate Mina compatible proof
84 lines • 4.06 kB
JavaScript
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, MerkleWitness, } from 'o1js';
import { BlobstreamProof, Bytes32, } from './verify_blobstream.js';
export const adminPrivateKey = PrivateKey.fromBase58('EKFcef5HKXAn7V2rQntLiXtJr15dkxrsrQ1G4pnYemhMEAWYbkZW');
export const adminPublicKey = adminPrivateKey.toPublicKey();
export class BlobstreamMerkleWitness extends MerkleWitness(32) {
}
class BlobstreamProofType extends BlobstreamProof {
}
export class BlobstreamProcessor extends SmartContract {
constructor() {
super(...arguments);
this.parametersWereSet = State();
this.commitmentsRoot = State();
this.currentLeafIndex = State();
this.trustedBlock = State();
}
init() {
super.init();
this.commitmentsRoot.set(Field.from(19057105225525447794058879360670244229202611178388892366137113354909512903676n));
this.currentLeafIndex.set(Field(0));
this.account.delegate.set(adminPublicKey);
this.parametersWereSet.set(Field(0));
}
async setParameters(trustedBlock) {
const parametersWereSet = this.parametersWereSet.getAndRequireEquals();
parametersWereSet.assertEquals(Field(0));
this.trustedBlock.set(trustedBlock);
this.parametersWereSet.set(Field(1));
}
async update(admin, blobstreamProof, path) {
blobstreamProof.verify();
let leafIndex = this.currentLeafIndex.getAndRequireEquals();
let commitmentsRoot = this.commitmentsRoot.getAndRequireEquals();
path.calculateRoot(Field(0)).assertEquals(commitmentsRoot);
const newRoot = path.calculateRoot(Poseidon.hash([...blobstreamProof.publicInput.dataCommitment.toFields()]));
let trustedBlock = this.trustedBlock.getAndRequireEquals();
trustedBlock.assertEquals(Poseidon.hashPacked(Bytes32.provable, blobstreamProof.publicInput.trustedHeaderHash));
this.trustedBlock.set(Poseidon.hashPacked(Bytes32.provable, blobstreamProof.publicInput.targetHeaderHash));
this.commitmentsRoot.set(newRoot);
this.currentLeafIndex.set(leafIndex.add(Field.from(1)));
const adminPk = admin.toPublicKey();
this.account.delegate.requireEquals(adminPk);
}
}
__decorate([
state(Field),
__metadata("design:type", Object)
], BlobstreamProcessor.prototype, "parametersWereSet", void 0);
__decorate([
state(Field),
__metadata("design:type", Object)
], BlobstreamProcessor.prototype, "commitmentsRoot", void 0);
__decorate([
state(Field),
__metadata("design:type", Object)
], BlobstreamProcessor.prototype, "currentLeafIndex", void 0);
__decorate([
state(Field),
__metadata("design:type", Object)
], BlobstreamProcessor.prototype, "trustedBlock", void 0);
__decorate([
method,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Field]),
__metadata("design:returntype", Promise)
], BlobstreamProcessor.prototype, "setParameters", null);
__decorate([
method,
__metadata("design:type", Function),
__metadata("design:paramtypes", [PrivateKey,
BlobstreamProofType,
BlobstreamMerkleWitness]),
__metadata("design:returntype", Promise)
], BlobstreamProcessor.prototype, "update", null);
//# sourceMappingURL=blobstream_contract.js.map