AlmostForeignField
Defined in: lib/provable/foreign-field.ts:469
Extends
ForeignFieldWithMul
Constructors
new AlmostForeignField()
new AlmostForeignField(x:
| string
| number
| bigint
| Field3
| AlmostForeignField): AlmostForeignField
Defined in: lib/provable/foreign-field.ts:472
Parameters
x
string
| number
| bigint
| Field3
| AlmostForeignField
Returns
Overrides
ForeignFieldWithMul.constructor
Properties
type
type: "AlmostReduced" | "FullyReduced" = 'AlmostReduced';
Defined in: lib/provable/foreign-field.ts:470
value
value: Field3;
Defined in: lib/provable/foreign-field.ts:39
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:17
Inherited from
ForeignFieldWithMul._Bigint
_modulus
static _modulus: undefined | bigint = undefined;
Defined in: lib/provable/foreign-field.ts:18
Inherited from
ForeignFieldWithMul._modulus
_provable
static _provable:
| undefined
| ProvablePureExtended<AlmostForeignField, bigint, string> = undefined;
Defined in: lib/provable/foreign-field.ts:476
Overrides
ForeignFieldWithMul._provable
_variants
static _variants:
| undefined
| {
almostReduced: typeof AlmostForeignField;
canonical: typeof CanonicalForeignField;
unreduced: typeof UnreducedForeignField;
} = undefined;
Defined in: lib/provable/foreign-field.ts:48
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:41
Returns
typeof ForeignField
Inherited from
ForeignFieldWithMul.Constructor
modulus
Get Signature
get modulus(): bigint
Defined in: lib/provable/foreign-field.ts:29
Returns
bigint
Inherited from
ForeignFieldWithMul.modulus
AlmostReduced
Get Signature
get static AlmostReduced(): typeof AlmostForeignField
Defined in: lib/provable/foreign-field.ts:66
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:21
Returns
{}
Inherited from
ForeignFieldWithMul.Bigint
Canonical
Get Signature
get static Canonical(): typeof CanonicalForeignField
Defined in: lib/provable/foreign-field.ts:73
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:25
Returns
bigint
Inherited from
ForeignFieldWithMul.modulus
provable
Get Signature
get static provable(): ProvablePureExtended<AlmostForeignField, bigint, string>
Defined in: lib/provable/foreign-field.ts:478
Provable<ForeignField>
, see Provable
Returns
ProvablePureExtended
<AlmostForeignField
, bigint
, string
>
Overrides
ForeignFieldWithMul.provable
sizeInBits
Get Signature
get static sizeInBits(): number
Defined in: lib/provable/foreign-field.ts:32
Returns
number
Inherited from
ForeignFieldWithMul.sizeInBits
Unreduced
Get Signature
get static Unreduced(): typeof UnreducedForeignField
Defined in: lib/provable/foreign-field.ts:59
Constructor for unreduced field elements.
Returns
typeof UnreducedForeignField
Inherited from
ForeignFieldWithMul.Unreduced
Methods
add()
add(y: number | bigint | ForeignField): UnreducedForeignField
Defined in: lib/provable/foreign-field.ts:210
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:165
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:196
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
Inherited from
ForeignFieldWithMul.assertCanonical
assertEquals()
Call Signature
assertEquals(y: number | bigint | CanonicalForeignField, message?: string): CanonicalForeignField
Defined in: lib/provable/foreign-field.ts:288
Assert equality with a ForeignField-like value
Parameters
y
number
| bigint
| CanonicalForeignField
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: AlmostForeignField, message?: string): AlmostForeignField
Defined in: lib/provable/foreign-field.ts:289
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:290
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:325
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:447
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): Bool
Defined in: lib/provable/foreign-field.ts:505
Check equality with a constant value.
Parameters
y
number
| bigint
Returns
Example
let isXZero = x.equals(0);
inv()
inv(): AlmostForeignField
Defined in: lib/provable/foreign-field.ts:433
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
mul()
mul(y: number | bigint | AlmostForeignField): UnreducedForeignField
Defined in: lib/provable/foreign-field.ts:419
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:221
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:236
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:148
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:344
Unpack a field element to its bits, as a Bool[] array.
This method is provable!
Parameters
length?
number
Returns
Bool
[]
Inherited from
ForeignFieldWithMul.toBits
toFields()
toFields(): Field[]
Defined in: lib/provable/foreign-field.ts:392
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:179
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 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:483
Parameters
x
Returns
void
Overrides
ForeignFieldWithMul.check
from()
Call Signature
static from(x: string | number | bigint): CanonicalForeignField
Defined in: lib/provable/foreign-field.ts:114
Coerce the input to a ForeignField.
Parameters
x
string
| number
| bigint
Returns
Inherited from
ForeignFieldWithMul.from
Call Signature
static from(x: string | number | bigint | ForeignField): ForeignField
Defined in: lib/provable/foreign-field.ts:115
Coerce the input to a ForeignField.
Parameters
x
string
| number
| bigint
| ForeignField
Returns
Inherited from
ForeignFieldWithMul.from
fromBits()
static fromBits(bits: Bool[]): AlmostForeignField
Defined in: lib/provable/foreign-field.ts:374
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:385
Returns
Inherited from
ForeignFieldWithMul.random
sum()
static sum(xs: (number | bigint | ForeignField)[], operations: (-1 | 1)[]): UnreducedForeignField
Defined in: lib/provable/foreign-field.ts:261
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): AlmostForeignField
Defined in: lib/provable/foreign-field.ts:493
Coerce the input to an AlmostForeignField without additional assertions.
Warning: Only use if you know what you're doing.