@silvana-one/mina-utils
Version:
Silvana Mina Utils
23 lines (20 loc) • 729 B
text/typescript
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;
}