Scalar
Defined in: lib/provable/scalar.ts:24
Represents a Scalar.
Implements
ShiftedScalar
Properties
high254
high254: Field;
Defined in: lib/provable/scalar.ts:31
Implementation of
ShiftedScalar.high254
lowBit
lowBit: Bool;
Defined in: lib/provable/scalar.ts:30
We represent a scalar s in shifted form t = s - 2^255 mod q,
split into its low bit (t & 1) and high 254 bits (t >> 1).
The reason is that we can efficiently compute the scalar multiplication (t + 2^255) * P = s * P
.
Implementation of
ShiftedScalar.lowBit
ORDER
static ORDER: bigint = Fq.modulus;
Defined in: lib/provable/scalar.ts:33
Methods
add()
add(y: Scalar): Scalar
Defined in: lib/provable/scalar.ts:144
Add scalar field elements.
Warning: This method is not available for provable code.
Parameters
y
Returns
div()
div(y: Scalar): Scalar
Defined in: lib/provable/scalar.ts:181
Divide scalar field elements. Throws if the denominator is zero.
Warning: This method is not available for provable code.
Parameters
y
Returns
isConstant()
isConstant(): boolean
Defined in: lib/provable/scalar.ts:75
Check whether this Scalar is a hard-coded constant in the constraint system. If a Scalar is constructed outside provable code, it is a constant.
Returns
boolean
mul()
mul(y: Scalar): Scalar
Defined in: lib/provable/scalar.ts:168
Multiply scalar field elements.
Warning: This method is not available for provable code.
Parameters
y
Returns
neg()
neg(): Scalar
Defined in: lib/provable/scalar.ts:133
Negate a scalar field element.
Warning: This method is not available for provable code.
Returns
sub()
sub(y: Scalar): Scalar
Defined in: lib/provable/scalar.ts:156
Subtract scalar field elements.
Warning: This method is not available for provable code.
Parameters
y
Returns
toBigInt()
toBigInt(): bigint
Defined in: lib/provable/scalar.ts:96
Convert this Scalar into a bigint
Returns
bigint
toFields()
toFields(): Field[]
Defined in: lib/provable/scalar.ts:234
Serialize this Scalar to Field elements.
Warning: This function is for internal usage. It returns 255 field elements which represent the Scalar in a shifted, bitwise format. The fields are not constrained to be boolean.
Check out Scalar.toFieldsCompressed for a user-friendly serialization that can be used outside proofs.
Returns
Field
[]
toFieldsCompressed()
toFieldsCompressed(): {
field: Field;
highBit: Bool;
}
Defined in: lib/provable/scalar.ts:197
Serialize a Scalar into a Field element plus one bit, where the bit is represented as a Bool.
Warning: This method is not available for provable code.
Note: Since the Scalar field is slightly larger than the base Field, an additional high bit
is needed to represent all Scalars. However, for a random Scalar, the high bit will be false
with overwhelming probability.
Returns
{
field: Field;
highBit: Bool;
}
field
field: Field;
highBit
highBit: Bool;
toJSON()
toJSON(): string
Defined in: lib/provable/scalar.ts:323
Serializes this Scalar to a string
Returns
string
check()
static check(s: Scalar): void
Defined in: lib/provable/scalar.ts:285
Part of the Provable interface.
Parameters
s
Returns
void
empty()
static empty(): Scalar
Defined in: lib/provable/scalar.ts:335
Returns
from()
static from(s: string | number | bigint | Scalar): Scalar
Defined in: lib/provable/scalar.ts:45
Create a constant Scalar from a bigint, number, string or Scalar.
If the input is too large, it is reduced modulo the scalar field size.
Parameters
s
string
| number
| bigint
| Scalar
Returns
fromBits()
static fromBits(bits: Bool[]): Scalar
Defined in: lib/provable/scalar.ts:106
Creates a Scalar from an array of Bool. This method is provable.
Parameters
bits
Bool
[]
Returns
fromField()
static fromField(s: Field): Scalar
Defined in: lib/provable/scalar.ts:66
Provable method to convert a Field into a Scalar.
This is always possible and unambiguous, since the scalar field is larger than the base field.
Parameters
s
Returns
fromFields()
static fromFields(fields: Field[]): Scalar
Defined in: lib/provable/scalar.ts:266
Part of the Provable interface.
Creates a data structure from an array of serialized Field elements.
Parameters
fields
Field
[]
Returns
fromJSON()
static fromJSON(x: string): Scalar
Defined in: lib/provable/scalar.ts:331
Deserialize a JSON structure into a Scalar. This operation does not affect the circuit and can't be used to prove anything about the string representation of the Scalar.
Parameters
x
string
Returns
fromValue()
static fromValue(x: bigint): Scalar
Defined in: lib/provable/scalar.ts:305
Parameters
x
bigint
Returns
random()
static random(): Scalar
Defined in: lib/provable/scalar.ts:122
Returns a random Scalar. Randomness can not be proven inside a circuit!
Returns
sizeInFields()
static sizeInFields(): number
Defined in: lib/provable/scalar.ts:278
Part of the Provable interface.
Returns the size of this type in Field elements.
Returns
number
toAuxiliary()
static toAuxiliary(): never[]
Defined in: lib/provable/scalar.ts:257
Part of the Provable interface.
Serialize a Scalar into its auxiliary data, which are empty.
Returns
never
[]
toCanonical()
static toCanonical(s: Scalar): Scalar
Defined in: lib/provable/scalar.ts:293
Parameters
s
Returns
toFields()
static toFields(x: Scalar): Field[]
Defined in: lib/provable/scalar.ts:220
Part of the Provable interface.
Serialize a Scalar into an array of Field elements.
Warning: This function is for internal usage. It returns 255 field elements which represent the Scalar in a shifted, bitwise format. The fields are not constrained to be boolean.
Parameters
x
Returns
Field
[]
toInput()
static toInput(value: Scalar): HashInput
Defined in: lib/provable/scalar.ts:248
Warning: This function is mainly for internal use. Normally it is not intended to be used by a zkApp developer.
This function is the implementation of ProvableExtended.toInput()
for the Scalar type.
Parameters
value
The Scalar element to get the input
array.
Returns
HashInput
An object where the fields
key is a Field array of length 1 created from this Field.
toJSON()
static toJSON(x: Scalar): string
Defined in: lib/provable/scalar.ts:315
Serialize a Scalar to a JSON string. This operation does not affect the circuit and can't be used to prove anything about the string representation of the Scalar.
Parameters
x
Returns
string
toValue()
static toValue(x: Scalar): bigint
Defined in: lib/provable/scalar.ts:301
Parameters
x
Returns
bigint