ScalarField
ForeignField representing the scalar field of Pallas and the base field of Vesta
Extends
UnreducedForeignField
\<this
>
Constructors
new ScalarField()
new ScalarField(x:
| string
| number
| bigint
| Field3
| ForeignField): ScalarField
Create a new ForeignField from a bigint, number, string or another ForeignField.
Parameters
• x:
| string
| number
| bigint
| Field3
| ForeignField
Returns
Inherited from
createForeignField(Fq.modulus).constructor
Example
let x = new ForeignField(5);
Note: Inputs must be range checked if they originate from a different field with a different modulus or if they are not constants.
- When constructing from another ForeignField instance, ensure the modulus matches. If not, check the modulus using
Gadgets.ForeignField.assertLessThan()
and handle appropriately. - When constructing from a Field3 array, ensure all elements are valid Field elements and range checked.
- Ensure constants are correctly reduced to the modulus of the field.
Source
lib/provable/foreign-field.ts:101
Properties
type
type: "Unreduced" | "AlmostReduced" | "FullyReduced" = 'Unreduced';
Inherited from
createForeignField(Fq.modulus).type
Source
lib/provable/foreign-field.ts:469
value
value: Field3;
The internal representation of a foreign field element, as a tuple of 3 limbs.
Inherited from
createForeignField(Fq.modulus).value
Source
lib/provable/foreign-field.ts:49
_Bigint
static _Bigint: undefined | {} = undefined;
Inherited from
createForeignField(Fq.modulus)._Bigint
Source
lib/provable/foreign-field.ts:27
_modulus
static _modulus: undefined | bigint = undefined;
Inherited from
createForeignField(Fq.modulus)._modulus
Source
lib/provable/foreign-field.ts:28
_provable
static _provable: undefined | ProvablePureExtended<UnreducedForeignField, bigint, string> = undefined;
Inherited from
createForeignField(Fq.modulus)._provable
Source
lib/provable/foreign-field.ts:471
_variants
static _variants: undefined | {
"almostReduced": typeof AlmostForeignField;
"canonical": typeof CanonicalForeignField;
"unreduced": typeof UnreducedForeignField;
} = undefined;
Sibling classes that represent different ranges of field elements.
Inherited from
createForeignField(Fq.modulus)._variants
Source
lib/provable/foreign-field.ts:58
Accessors
Constructor
get Constructor(): typeof ForeignField
Returns
typeof ForeignField
Source
lib/provable/foreign-field.ts:51
modulus
get modulus(): bigint
Returns
bigint
Source
lib/provable/foreign-field.ts:39
AlmostReduced
get static AlmostReduced(): typeof AlmostForeignField
Constructor for field elements that are "almost reduced", i.e. lie in the range [0, 2^ceil(log2(p))).
Returns
typeof AlmostForeignField
Source
lib/provable/foreign-field.ts:76
Bigint
get static Bigint(): {}
Returns
{}
Source
lib/provable/foreign-field.ts:31
Canonical
get static Canonical(): typeof CanonicalForeignField
Constructor for field elements that are fully reduced, i.e. lie in the range [0, p).
Returns
typeof CanonicalForeignField
Source
lib/provable/foreign-field.ts:83
Unreduced
get static Unreduced(): typeof UnreducedForeignField
Constructor for unreduced field elements.
Returns
typeof UnreducedForeignField
Source
lib/provable/foreign-field.ts:69
modulus
get static modulus(): bigint
Returns
bigint
Source
lib/provable/foreign-field.ts:35
provable
get static provable(): ProvablePureExtended<UnreducedForeignField, bigint, string>
Returns
ProvablePureExtended
\<UnreducedForeignField
, bigint
, string
>
Source
lib/provable/foreign-field.ts:474
sizeInBits
get static sizeInBits(): number
Returns
number
Source
lib/provable/foreign-field.ts:42
Methods
add()
add(y: number | bigint | ForeignField): UnreducedForeignField
Finite field addition
Parameters
• y: number
| bigint
| ForeignField
Returns
UnreducedForeignField
Inherited from
createForeignField(Fq.modulus).add
Example
x.add(2); // x + 2 mod p
Source
lib/provable/foreign-field.ts:218
assertAlmostReduced()
assertAlmostReduced(): AlmostForeignField
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
createForeignField(Fq.modulus).assertAlmostReduced
Source
lib/provable/foreign-field.ts:173
assertCanonical()
assertCanonical(): CanonicalForeignField
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
createForeignField(Fq.modulus).assertCanonical
Source
lib/provable/foreign-field.ts:204
assertEquals()
assertEquals(y, message)
assertEquals(y: number | bigint | CanonicalForeignField, message?: string): CanonicalForeignField
Assert equality with a ForeignField-like value
Parameters
• y: number
| bigint
| CanonicalForeignField
• message?: string
Returns
Inherited from
createForeignField(Fq.modulus).assertEquals
Example
x.assertEquals(0, "x is zero");
Since asserting equality can also serve as a range check,
this method returns x
with the appropriate type:
Example
let xChecked = x.assertEquals(1, "x is 1");
xChecked satisfies CanonicalForeignField;
Source
lib/provable/foreign-field.ts:296
assertEquals(y, message)
assertEquals(y: AlmostForeignField, message?: string): AlmostForeignField
Parameters
• y: AlmostForeignField
• message?: string
Returns
Inherited from
createForeignField(Fq.modulus).assertEquals
Source
lib/provable/foreign-field.ts:300
assertEquals(y, message)
assertEquals(y: ForeignField, message?: string): ForeignField
Parameters
• y: ForeignField
• message?: string
Returns
Inherited from
createForeignField(Fq.modulus).assertEquals
Source
lib/provable/foreign-field.ts:301
assertLessThan()
assertLessThan(c: number | bigint, message?: string): void
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
Inherited from
createForeignField(Fq.modulus).assertLessThan
Example
x.assertLessThan(10);
Source
lib/provable/foreign-field.ts:339
isConstant()
isConstant(): boolean
Checks whether this field element is a constant.
See FieldVar to understand constants vs variables.
Returns
boolean
Inherited from
createForeignField(Fq.modulus).isConstant
Source
lib/provable/foreign-field.ts:136
neg()
neg(): AlmostForeignField
Finite field negation
Returns
Inherited from
createForeignField(Fq.modulus).neg
Example
x.neg(); // -x mod p = p - x
Source
lib/provable/foreign-field.ts:229
sub()
sub(y: number | bigint | ForeignField): UnreducedForeignField
Finite field subtraction
Parameters
• y: number
| bigint
| ForeignField
Returns
UnreducedForeignField
Inherited from
createForeignField(Fq.modulus).sub
Example
x.sub(1); // x - 1 mod p
Source
lib/provable/foreign-field.ts:244
toBigInt()
toBigInt(): bigint
Convert this field element to a bigint.
Returns
bigint
Inherited from
createForeignField(Fq.modulus).toBigInt
Source
lib/provable/foreign-field.ts:156
toBits()
toBits(length?: number): Bool[]
Unpack a field element to its bits, as a Bool[] array.
This method is provable!
Parameters
• length?: number
Returns
Bool
[]
Inherited from
createForeignField(Fq.modulus).toBits
Source
lib/provable/foreign-field.ts:358
toConstant()
toConstant(): ForeignField
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
createForeignField(Fq.modulus).toConstant
Source
lib/provable/foreign-field.ts:148
toFields()
toFields(): Field[]
Instance version of Provable<ForeignField>.toFields
, see Provable.toFields
Returns
Field
[]
Inherited from
createForeignField(Fq.modulus).toFields
Source
lib/provable/foreign-field.ts:406
toScalar()
toScalar(): Scalar
Provable method to convert a ScalarField into a Scalar
Returns
Source
lib/provable/scalar-field.ts:16
assertAlmostReduced()
static assertAlmostReduced<T>(...xs: T): [...{ [i in string | number | symbol]: AlmostForeignField }[]]
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
createForeignField(Fq.modulus).assertAlmostReduced
Source
lib/provable/foreign-field.ts:187
check()
static check(x: ForeignField): void
Parameters
• x: ForeignField
Returns
void
Inherited from
createForeignField(Fq.modulus).check
Source
lib/provable/foreign-field.ts:479
from()
from(x)
static from(x: string | number | bigint): CanonicalForeignField
Coerce the input to a ForeignField.
Parameters
• x: string
| number
| bigint
Returns
Inherited from
createForeignField(Fq.modulus).from
Source
lib/provable/foreign-field.ts:124
from(x)
static from(x: string | number | bigint | ForeignField): ForeignField
Parameters
• x: string
| number
| bigint
| ForeignField
Returns
Inherited from
createForeignField(Fq.modulus).from
Source
lib/provable/foreign-field.ts:125
fromBits()
static fromBits(bits: Bool[]): AlmostForeignField
Create a field element from its bits, as a Bool[]
array.
This method is provable!
Parameters
• bits: Bool
[]
Returns
Inherited from
createForeignField(Fq.modulus).fromBits
Source
lib/provable/foreign-field.ts:388
fromScalar()
static fromScalar(s: Scalar): ScalarField
Converts this Scalar into a ScalarField
Parameters
• s: Scalar
Returns
Source
lib/provable/scalar-field.ts:34
random()
static random(): CanonicalForeignField
Returns
Inherited from
createForeignField(Fq.modulus).random
Source
lib/provable/foreign-field.ts:399
sum()
static sum(xs: (number | bigint | ForeignField)[], operations: (-1 | 1)[]): UnreducedForeignField
Sum (or difference) of multiple finite field elements.
Parameters
• xs: (number
| bigint
| ForeignField
)[]
• operations: (-1
| 1
)[]
Returns
UnreducedForeignField
Inherited from
createForeignField(Fq.modulus).sum
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.
Source
lib/provable/foreign-field.ts:269
toScalar()
static toScalar(field: ForeignField): Scalar
Parameters
• field: ForeignField