CanonicalForeignField
Defined in: lib/provable/foreign-field.ts:541
Extends
ForeignFieldWithMul
Constructors
Constructor
new CanonicalForeignField(x: string | number | bigint | Field3 | CanonicalForeignField): CanonicalForeignField;
Defined in: lib/provable/foreign-field.ts:544
Parameters
x
string | number | bigint | Field3 | CanonicalForeignField
Returns
CanonicalForeignField
Overrides
ForeignFieldWithMul.constructor
Properties
type
type: "FullyReduced";
Defined in: lib/provable/foreign-field.ts:542
value
value: Field3;
Defined in: lib/provable/foreign-field.ts:40
The internal representation of a foreign field element, as a tuple of 3 limbs.
Inherited from
ForeignFieldWithMul.value
_Bigint
static _Bigint:
| undefined
| {
} = undefined;
Defined in: lib/provable/foreign-field.ts:18
Inherited from
ForeignFieldWithMul._Bigint
_modulus
static _modulus: undefined | bigint = undefined;
Defined in: lib/provable/foreign-field.ts:19
Inherited from
ForeignFieldWithMul._modulus
_provable
static _provable:
| undefined
| ProvablePureExtended<CanonicalForeignField, bigint, string> = undefined;
Defined in: lib/provable/foreign-field.ts:548
Overrides
ForeignFieldWithMul._provable
_variants
static _variants:
| undefined
| {
almostReduced: typeof AlmostForeignField;
canonical: typeof CanonicalForeignField;
unreduced: typeof UnreducedForeignField;
} = undefined;
Defined in: lib/provable/foreign-field.ts:79
Sibling classes that represent different ranges of field elements.
Inherited from
ForeignFieldWithMul._variants
Accessors
Constructor
Get Signature
get Constructor(): typeof ForeignField;
Defined in: lib/provable/foreign-field.ts:42
Returns
typeof ForeignField
Inherited from
ForeignFieldWithMul.Constructor
modulus
Get Signature
get modulus(): bigint;
Defined in: lib/provable/foreign-field.ts:30
Returns
bigint
Inherited from
ForeignFieldWithMul.modulus
AlmostReduced
Get Signature
get static AlmostReduced(): typeof AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:97
Constructor for field elements that are "almost reduced", i.e. lie in the range [0, 2^ceil(log2(p))).
Returns
typeof AlmostForeignField
Inherited from
ForeignFieldWithMul.AlmostReduced
Bigint
Get Signature
get static Bigint(): {
};
Defined in: lib/provable/foreign-field.ts:22
Returns
{
}
Inherited from
ForeignFieldWithMul.Bigint
Canonical
Get Signature
get static Canonical(): typeof CanonicalForeignField;
Defined in: lib/provable/foreign-field.ts:104
Constructor for field elements that are fully reduced, i.e. lie in the range [0, p).
Returns
typeof CanonicalForeignField
Inherited from
ForeignFieldWithMul.Canonical
modulus
Get Signature
get static modulus(): bigint;
Defined in: lib/provable/foreign-field.ts:26
Returns
bigint
Inherited from
ForeignFieldWithMul.modulus
provable
Get Signature
get static provable(): ProvablePureExtended<CanonicalForeignField, bigint, string>;
Defined in: lib/provable/foreign-field.ts:550
Provable<ForeignField>, see Provable
Returns
ProvablePureExtended<CanonicalForeignField, bigint, string>
Overrides
ForeignFieldWithMul.provable
sizeInBits
Get Signature
get static sizeInBits(): number;
Defined in: lib/provable/foreign-field.ts:33
Returns
number
Inherited from
ForeignFieldWithMul.sizeInBits
Unreduced
Get Signature
get static Unreduced(): typeof UnreducedForeignField;
Defined in: lib/provable/foreign-field.ts:90
Constructor for unreduced field elements.
Returns
typeof UnreducedForeignField
Inherited from
ForeignFieldWithMul.Unreduced
Unsafe
Get Signature
get static Unsafe(): {
fromField: CanonicalForeignField;
};
Defined in: lib/provable/foreign-field.ts:49
Unsafe constructor methods for advanced usage.
Returns
fromField()
fromField(x: Field): CanonicalForeignField;
Converts a Field into a ForeignField. This is an unsafe operation as the native Field size may be larger than the Foreign Field size, and changes in modulus can have unintended consequences.
Only use this if you have already constrained the Field element to be within the foreign field modulus.
Parameters
x
a Field
Returns
CanonicalForeignField
Inherited from
ForeignFieldWithMul.Unsafe
Methods
add()
add(y: number | bigint | ForeignField): UnreducedForeignField;
Defined in: lib/provable/foreign-field.ts:241
Finite field addition
Parameters
y
number | bigint | ForeignField
Returns
Example
x.add(2); // x + 2 mod p
Inherited from
ForeignFieldWithMul.add
assertAlmostReduced()
assertAlmostReduced(): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:196
Assert that this field element lies in the range [0, 2^k), where k = ceil(log2(p)) and p is the foreign field modulus.
Returns the field element as a AlmostForeignField.
For a more efficient version of this for multiple field elements, see assertAlmostReduced.
Note: this does not ensure that the field elements is in the canonical range [0, p). To assert that stronger property, there is assertCanonical. You should typically use assertAlmostReduced though, because it is cheaper to prove and sufficient for ensuring validity of all our non-native field arithmetic methods.
Returns
Inherited from
ForeignFieldWithMul.assertAlmostReduced
assertCanonical()
assertCanonical(): CanonicalForeignField;
Defined in: lib/provable/foreign-field.ts:227
Assert that this field element is fully reduced, i.e. lies in the range [0, p), where p is the foreign field modulus.
Returns the field element as a CanonicalForeignField.
Returns
CanonicalForeignField
Inherited from
ForeignFieldWithMul.assertCanonical
assertEquals()
Call Signature
assertEquals(y: number | bigint | CanonicalForeignField, message?: string): CanonicalForeignField;
Defined in: lib/provable/foreign-field.ts:319
Assert equality with a ForeignField-like value
Parameters
y
number | bigint | CanonicalForeignField
message?
string
Returns
CanonicalForeignField
Examples
x.assertEquals(0, "x is zero");
Since asserting equality can also serve as a range check,
this method returns x with the appropriate type:
let xChecked = x.assertEquals(1, "x is 1");
xChecked satisfies CanonicalForeignField;
Inherited from
ForeignFieldWithMul.assertEquals
Call Signature
assertEquals(y: AlmostForeignField, message?: string): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:320
Assert equality with a ForeignField-like value
Parameters
y
message?
string
Returns
Examples
x.assertEquals(0, "x is zero");
Since asserting equality can also serve as a range check,
this method returns x with the appropriate type:
let xChecked = x.assertEquals(1, "x is 1");
xChecked satisfies CanonicalForeignField;
Inherited from
ForeignFieldWithMul.assertEquals
Call Signature
assertEquals(y: ForeignField, message?: string): ForeignField;
Defined in: lib/provable/foreign-field.ts:321
Assert equality with a ForeignField-like value
Parameters
y
message?
string
Returns
Examples
x.assertEquals(0, "x is zero");
Since asserting equality can also serve as a range check,
this method returns x with the appropriate type:
let xChecked = x.assertEquals(1, "x is 1");
xChecked satisfies CanonicalForeignField;
Inherited from
ForeignFieldWithMul.assertEquals
assertLessThan()
assertLessThan(c: number | bigint, message?: string): void;
Defined in: lib/provable/foreign-field.ts:356
Assert that this field element is less than a constant c: x < c.
The constant must satisfy 0 <= c < 2^264, otherwise an error is thrown.
Parameters
c
number | bigint
message?
string
Returns
void
Example
x.assertLessThan(10);
Inherited from
ForeignFieldWithMul.assertLessThan
div()
div(y: number | bigint | AlmostForeignField): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:478
Division in the finite field, i.e. x*y^(-1) mod p where y^(-1) is the finite field inverse.
Parameters
y
number | bigint | AlmostForeignField
Returns
Example
let z = x.div(y); // x/y mod p
z.mul(y).assertEquals(x);
Inherited from
ForeignFieldWithMul.div
equals()
equals(y: number | bigint | CanonicalForeignField): Bool;
Defined in: lib/provable/foreign-field.ts:580
Check equality with a ForeignField-like value.
Parameters
y
number | bigint | CanonicalForeignField
Returns
Example
let isEqual = x.equals(y);
Note: This method only exists on canonical fields; on unreduced fields, it would be easy to misuse, because not being exactly equal does not imply being unequal modulo p.
inv()
inv(): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:464
Multiplicative inverse in the finite field
Returns
Example
let z = x.inv(); // 1/x mod p
z.mul(x).assertEquals(1);
Inherited from
ForeignFieldWithMul.inv
isConstant()
isConstant(): boolean;
Defined in: lib/provable/foreign-field.ts:159
Checks whether this field element is a constant.
See FieldVar to understand constants vs variables.
Returns
boolean
Inherited from
ForeignFieldWithMul.isConstant
mul()
mul(y: number | bigint | AlmostForeignField): UnreducedForeignField;
Defined in: lib/provable/foreign-field.ts:450
Finite field multiplication
Parameters
y
number | bigint | AlmostForeignField
Returns
Example
x.mul(y); // x*y mod p
Inherited from
ForeignFieldWithMul.mul
neg()
neg(): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:252
Finite field negation
Returns
Example
x.neg(); // -x mod p = p - x
Inherited from
ForeignFieldWithMul.neg
sub()
sub(y: number | bigint | ForeignField): UnreducedForeignField;
Defined in: lib/provable/foreign-field.ts:267
Finite field subtraction
Parameters
y
number | bigint | ForeignField
Returns
Example
x.sub(1); // x - 1 mod p
Inherited from
ForeignFieldWithMul.sub
toBigInt()
toBigInt(): bigint;
Defined in: lib/provable/foreign-field.ts:179
Convert this field element to a bigint.
Returns
bigint
Inherited from
ForeignFieldWithMul.toBigInt
toBits()
toBits(length?: number): Bool[];
Defined in: lib/provable/foreign-field.ts:375
Unpack a field element to its bits, as a Bool[] array.
This method is provable!
Parameters
length?
number
Returns
Bool[]
Inherited from
ForeignFieldWithMul.toBits
toConstant()
toConstant(): ForeignField;
Defined in: lib/provable/foreign-field.ts:171
Convert this field element to a constant.
See FieldVar to understand constants vs variables.
Warning: This function is only useful in Provable.witness or Provable.asProver blocks, that is, in situations where the prover computes a value outside provable code.
Returns
Inherited from
ForeignFieldWithMul.toConstant
toFields()
toFields(): Field[];
Defined in: lib/provable/foreign-field.ts:423
Instance version of Provable<ForeignField>.toFields, see Provable.toFields
Returns
Field[]
Inherited from
ForeignFieldWithMul.toFields
assertAlmostReduced()
static assertAlmostReduced<T>(...xs: T): [...{ [i in string | number | symbol]: AlmostForeignField }[]];
Defined in: lib/provable/foreign-field.ts:210
Assert that one or more field elements lie in the range [0, 2^k), where k = ceil(log2(p)) and p is the foreign field modulus.
This is most efficient than when checking a multiple of 3 field elements at once.
Type Parameters
T
T extends Tuple<ForeignField>
Parameters
xs
...T
Returns
[...{ [i in string | number | symbol]: AlmostForeignField }[]]
Inherited from
ForeignFieldWithMul.assertAlmostReduced
check()
static check(x: ForeignField): void;
Defined in: lib/provable/foreign-field.ts:555
Parameters
x
Returns
void
Overrides
ForeignFieldWithMul.check
from()
Call Signature
static from(x: string | number | bigint): CanonicalForeignField;
Defined in: lib/provable/foreign-field.ts:147
Coerce the input to a ForeignField.
Parameters
x
The value to convert. Can be a ForeignField, bigint, number, or string.
string | number | bigint
Returns
CanonicalForeignField
Inherited from
ForeignFieldWithMul.from
Call Signature
static from(x: string | number | bigint | ForeignField): ForeignField;
Defined in: lib/provable/foreign-field.ts:148
Coerce the input to a ForeignField.
Parameters
x
The value to convert. Can be a ForeignField, bigint, number, or string.
string | number | bigint | ForeignField
Returns
Inherited from
ForeignFieldWithMul.from
fromBits()
static fromBits(bits: Bool[]): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:405
Create a field element from its bits, as a Bool[] array.
This method is provable!
Parameters
bits
Bool[]
Returns
Inherited from
ForeignFieldWithMul.fromBits
random()
static random(): CanonicalForeignField;
Defined in: lib/provable/foreign-field.ts:416
Returns
CanonicalForeignField
Inherited from
ForeignFieldWithMul.random
sum()
static sum(xs: (number | bigint | ForeignField)[], operations: (-1 | 1)[]): UnreducedForeignField;
Defined in: lib/provable/foreign-field.ts:292
Sum (or difference) of multiple finite field elements.
Parameters
xs
(number | bigint | ForeignField)[]
operations
(-1 | 1)[]
Returns
Example
let z = ForeignField.sum([3, 2, 1], [-1, 1]); // 3 - 2 + 1
z.assertEquals(2);
This method expects a list of ForeignField-like values, x0,...,xn,
and a list of "operations" op1,...,opn where every op is 1 or -1 (plus or minus),
and returns
x0 + op1*x1 + ... + opn*xn
where the sum is computed in finite field arithmetic.
Important: For more than two summands, this is significantly more efficient than chaining calls to ForeignField.add and ForeignField.sub.
Inherited from
ForeignFieldWithMul.sum
unsafeFrom()
static unsafeFrom(x: ForeignField): CanonicalForeignField;
Defined in: lib/provable/foreign-field.ts:565
Coerce the input to a CanonicalForeignField without additional assertions.
Warning: Only use if you know what you're doing.
Parameters
x
Returns
CanonicalForeignField