UNPKG

o1js

Version:

TypeScript framework for zk-SNARKs and zkApps

78 lines 2.68 kB
import { Field as InternalField } from './field.js'; import { Bool as InternalBool } from './bool.js'; import { Group as InternalGroup } from './group.js'; import { Scalar } from './scalar.js'; export { Field, Bool, Scalar, Group }; /** * A {@link Field} is an element of a prime order [finite field](https://en.wikipedia.org/wiki/Finite_field). * Every other provable type is built using the {@link Field} type. * * The field is the [pasta base field](https://electriccoin.co/blog/the-pasta-curves-for-halo-2-and-beyond/) of order 2^254 + 0x224698fc094cf91b992d30ed00000001 ({@link Field.ORDER}). * * You can create a new Field from everything "field-like" (`bigint`, integer `number`, decimal `string`, `Field`). * @example * ``` * Field(10n); // Field construction from a bigint * Field(100); // Field construction from a number * Field("1"); // Field construction from a decimal string * ``` * * **Beware**: Fields _cannot_ be constructed from fractional numbers or alphanumeric strings: * ```ts * Field(3.141); // ERROR: Cannot convert a float to a field element * Field("abc"); // ERROR: Invalid argument "abc" * ``` * * Creating a Field from a negative number can result in unexpected behavior if you are not familiar with [modular arithmetic](https://en.wikipedia.org/wiki/Modular_arithmetic). * @example * ``` * const x = Field(-1); // valid Field construction from negative number * const y = Field(Field.ORDER - 1n); // same as `x` * ``` * * **Important**: All the functions defined on a Field (arithmetic, logic, etc.) take their arguments as "field-like". * A Field itself is also defined as a "field-like" element. * * @param value - the value to convert to a {@link Field} * * @return A {@link Field} with the value converted from the argument */ const Field = toFunctionConstructor(InternalField); /** * A boolean value. You can create it like this: * * @example * ``` * const b = Bool(true); * ``` * * You can also combine multiple Bools with boolean operations: * * @example * ```ts * const c = Bool(false); * * const d = b.or(c).and(false).not(); * * d.assertTrue(); * ``` * * Bools are often created by methods on other types such as `Field.equals()`: * * ```ts * const b: Bool = Field(5).equals(6); * ``` */ const Bool = toFunctionConstructor(InternalBool); /** * An element of a Group. */ const Group = toFunctionConstructor(InternalGroup); function toFunctionConstructor(Class) { function Constructor(...args) { return new Class(...args); } Object.defineProperties(Constructor, Object.getOwnPropertyDescriptors(Class)); return Constructor; } //# sourceMappingURL=wrapped.js.map