Skip to main content

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

ScalarField

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

AlmostForeignField

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

CanonicalForeignField

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

CanonicalForeignField

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

AlmostForeignField

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

ForeignField

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

AlmostForeignField

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

ForeignField

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

Scalar

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

CanonicalForeignField

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

ForeignField

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

AlmostForeignField

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

ScalarField

Source

lib/provable/scalar-field.ts:34


random()

static random(): CanonicalForeignField

Returns

CanonicalForeignField

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

Returns

Scalar

Source

lib/provable/scalar-field.ts:20