UNPKG

@silvana-one/mina-utils

Version:
23 lines (20 loc) 729 B
import { Provable, Field, assert, Bool } from "o1js"; import { Fr } from "./constants.js"; import { CanonicalElement } from "./commitment.js"; export function convertFieldToCanonicalElement(field: Field): CanonicalElement { const bitsField = field.toBits(); assert(bitsField.length === 254, "Field has to be 254 bits"); const element: CanonicalElement = Provable.witness( Fr.Canonical.provable, () => { return Fr.from(field.toBigInt()); } ); const bitsElement = element.toBits(); assert(bitsElement.length === 255, "Element has to be 255 bits"); bitsElement[254].assertEquals(Bool(false)); for (let i = 0; i < 254; i++) { bitsElement[i].assertEquals(bitsField[i]); } return element; }