@netzero/contracts
Version:
This template uses TypeScript.
106 lines • 5.09 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 { ProofOfSolvency } from "@netzero/por_circuits";
import { Field, method, PublicKey, SmartContract, state, State } from "o1js";
import { NetZeroLiabilitiesVerifier } from "./polVerifier.js";
import { NetZeroAssetVerifier } from "./poaVerifier.js";
export class ProofOfSolvencyVerifier extends SmartContract {
constructor() {
super(...arguments);
this.proofOfAssetsVerifier = State();
this.proofOfLiabilitiesVerifier = State();
this.admin = State();
this.verifiedProofs = State();
}
init() {
super.init();
this.proofOfAssetsVerifier.set(PublicKey.empty());
this.proofOfLiabilitiesVerifier.set(PublicKey.empty());
this.admin.set(this.sender.getAndRequireSignature());
}
async changeAdmin(admin) {
this.sender.getAndRequireSignature().assertEquals(this.admin.getAndRequireEquals());
this.admin.set(admin);
}
async setProofOfAssetsVerifier(proofOfAssetsVerifier) {
// Verify that the sender is the admin
this.sender.getAndRequireSignature().assertEquals(this.admin.getAndRequireEquals());
this.proofOfAssetsVerifier.set(proofOfAssetsVerifier);
}
async setProofOfLiabilitiesVerifier(proofOfLiabilitiesVerifier) {
// Verify that the sender is the admin
this.sender.getAndRequireSignature().assertEquals(this.admin.getAndRequireEquals());
this.proofOfLiabilitiesVerifier.set(proofOfLiabilitiesVerifier);
}
async setContractAddresses(proofOfAssetsVerifier, proofOfLiabilitiesVerifier) {
this.sender.getAndRequireSignature().assertEquals(this.admin.getAndRequireEquals());
this.proofOfAssetsVerifier.set(proofOfAssetsVerifier);
this.proofOfLiabilitiesVerifier.set(proofOfLiabilitiesVerifier);
}
async verifyProofOfSolvency(proof) {
// Verify that the proof was generated with the correct verifier
proof.verify();
// verify the public inputs
const liabilitiesVerifier = new NetZeroLiabilitiesVerifier(this.proofOfLiabilitiesVerifier.getAndRequireEquals());
proof.publicInput.liabilitiesCommitment.assertEquals(liabilitiesVerifier.rootCommitment.getAndRequireEquals());
const assetsVerifier = new NetZeroAssetVerifier(this.proofOfAssetsVerifier.getAndRequireEquals());
proof.publicInput.assetsCommitment.assertEquals(assetsVerifier.assetCommitment.getAndRequireEquals());
// increment the verified proofs
this.verifiedProofs.set(this.verifiedProofs.getAndRequireEquals().add(1));
}
}
__decorate([
state(PublicKey),
__metadata("design:type", Object)
], ProofOfSolvencyVerifier.prototype, "proofOfAssetsVerifier", void 0);
__decorate([
state(PublicKey),
__metadata("design:type", Object)
], ProofOfSolvencyVerifier.prototype, "proofOfLiabilitiesVerifier", void 0);
__decorate([
state(PublicKey),
__metadata("design:type", Object)
], ProofOfSolvencyVerifier.prototype, "admin", void 0);
__decorate([
state(Field),
__metadata("design:type", Object)
], ProofOfSolvencyVerifier.prototype, "verifiedProofs", void 0);
__decorate([
method,
__metadata("design:type", Function),
__metadata("design:paramtypes", [PublicKey]),
__metadata("design:returntype", Promise)
], ProofOfSolvencyVerifier.prototype, "changeAdmin", null);
__decorate([
method,
__metadata("design:type", Function),
__metadata("design:paramtypes", [PublicKey]),
__metadata("design:returntype", Promise)
], ProofOfSolvencyVerifier.prototype, "setProofOfAssetsVerifier", null);
__decorate([
method,
__metadata("design:type", Function),
__metadata("design:paramtypes", [PublicKey]),
__metadata("design:returntype", Promise)
], ProofOfSolvencyVerifier.prototype, "setProofOfLiabilitiesVerifier", null);
__decorate([
method,
__metadata("design:type", Function),
__metadata("design:paramtypes", [PublicKey,
PublicKey]),
__metadata("design:returntype", Promise)
], ProofOfSolvencyVerifier.prototype, "setContractAddresses", null);
__decorate([
method,
__metadata("design:type", Function),
__metadata("design:paramtypes", [ProofOfSolvency]),
__metadata("design:returntype", Promise)
], ProofOfSolvencyVerifier.prototype, "verifyProofOfSolvency", null);
//# sourceMappingURL=pos.js.map