Class: CairoNonZero
Defined in: src/utils/cairoDataTypes/nonZero.ts:50
A Cairo core::zeroable::NonZero::<T> : a value of type T that is guaranteed not to be zero.
It adds nothing to the wire — a NonZero<u8> is the felt a u8 is. Its whole job is the check
it performs while being built, which is why a contract can then divide by it without a guard.
Only the types Cairo allows are accepted : the unsigned integers up to u256, and felt252.
Example
const nonZero = new CairoNonZero(2, 'core::zeroable::NonZero::<core::integer::u8>', cairoTypeStrategy);
nonZero.toApiRequest(); // ["2"] no wrapper felt
nonZero.decompose(cairoTypeStrategy); // 2n
Constructors
Constructor
new CairoNonZero(
content,type,parsingStrategy):CairoNonZero
Defined in: src/utils/cairoDataTypes/nonZero.ts:112
Build a non-zero value, from what a caller passed or from the felts of a response.
A value given raw is built as the wrapped type and then checked against zero. A value already built is taken as it stands, and a response is read as the wrapped type would be — in neither case is zero rejected, since what a node answers is not the caller's mistake to catch.
Parameters
content
unknown
the value, an instance already built, or the response iterator
type
string
the abi type, core::zeroable::NonZero::<T>
parsingStrategy
how to build the value
Returns
CairoNonZero
Throws
when the type is not a NonZero, when the wrapped type is one Cairo does not allow there, or when a value given raw is zero
Example
const type = 'core::zeroable::NonZero::<core::integer::u8>';
new CairoNonZero(2, type, cairoTypeStrategy).toApiRequest(); // ["2"]
new CairoNonZero(['0x9'].values(), type, cairoTypeStrategy).toApiRequest(); // ["9"]
Properties
dynamicSelector
staticdynamicSelector:"CairoNonZero"
Defined in: src/utils/cairoDataTypes/nonZero.ts:59
The name this class is registered under in a strategy's dynamicSelectors.
Example
const result = CairoNonZero.dynamicSelector;
// result = "CairoNonZero"
dynamicSelector
readonlydynamicSelector:"CairoNonZero"=CairoNonZero.dynamicSelector
Defined in: src/utils/cairoDataTypes/nonZero.ts:70
The selector on the instance, which is how a composite holding it knows what built it.
Example
const type = 'core::zeroable::NonZero::<core::integer::u8>';
const result = new CairoNonZero(2, type, cairoTypeStrategy).dynamicSelector;
// result = "CairoNonZero"
content
readonlycontent:CairoType
Defined in: src/utils/cairoDataTypes/nonZero.ts:81
The value, built as the type the NonZero wraps.
Example
const type = 'core::zeroable::NonZero::<core::integer::u8>';
const result = new CairoNonZero(2, type, cairoTypeStrategy).content.toApiRequest();
// result = ["2"]
contentType
readonlycontentType:string
Defined in: src/utils/cairoDataTypes/nonZero.ts:92
The abi type this value was built for, brackets included.
Example
const type = 'core::zeroable::NonZero::<core::integer::u8>';
const result = new CairoNonZero(2, type, cairoTypeStrategy).contentType;
// result = "core::zeroable::NonZero::<core::integer::u8>"
Methods
getNonZeroType()
staticgetNonZeroType(type):string
Defined in: src/utils/cairoDataTypes/nonZero.ts:183
The type a NonZero wraps.
Parameters
type
string
the abi type to read
Returns
string
the type between the angle brackets
Example
const result = CairoNonZero.getNonZeroType('core::zeroable::NonZero::<core::integer::u8>');
// result = "core::integer::u8"
validate()
staticvalidate(input,type):void
Defined in: src/utils/cairoDataTypes/nonZero.ts:202
Throw unless this is a NonZero of a type Cairo allows there.
The value is not read here : whether it is zero is checked once it has been built, since that
is what turns '0x0' and 0 into the same thing.
Parameters
input
unknown
the value, which this does not read
type
string
the abi type it is meant for
Returns
void
Throws
when the type is not a NonZero, or wraps a type Cairo does not allow
Example
CairoNonZero.validate(1, 'core::zeroable::NonZero::<core::integer::u8>'); // passes
CairoNonZero.validate(1, 'core::zeroable::NonZero::<core::integer::u512>');
// throws Error("Validate: core::integer::u512 type is not authorized for NonZero type.")
is()
staticis(input,type):boolean
Defined in: src/utils/cairoDataTypes/nonZero.ts:261
Can this be read as a NonZero of this type?
The non-throwing form of CairoNonZero.validate, so it says nothing about whether the value is zero.
Parameters
input
unknown
the value to test
type
string
the abi type it is meant for
Returns
boolean
true when the type is a NonZero of an allowed type
Example
const result = CairoNonZero.is(1, 'core::zeroable::NonZero::<core::integer::u8>');
// result = true
const result2 = CairoNonZero.is(1, 'core::integer::u8');
// result2 = false
isAbiType()
staticisAbiType(type):boolean
Defined in: src/utils/cairoDataTypes/nonZero.ts:282
Is this abi type a NonZero?
Parameters
type
string
the abi type to test
Returns
boolean
true for core::zeroable::NonZero::<T>
Example
const result = CairoNonZero.isAbiType('core::zeroable::NonZero::<core::integer::u8>');
// result = true
const result2 = CairoNonZero.isAbiType('core::integer::u8');
// result2 = false
validateValue()
validateValue(
cairoInstance):void
Defined in: src/utils/cairoDataTypes/nonZero.ts:234
Throw unless this built value is one a NonZero may hold, and is not zero.
Only a value given raw goes through here : one already built is taken as it stands, and a response is read as it comes.
Parameters
cairoInstance
the value that was just built
Returns
void
Throws
when the value is zero, or of a class a NonZero may not hold
Example
// called from the constructor
const type = 'core::zeroable::NonZero::<core::integer::u8>';
new CairoNonZero(0, type, cairoTypeStrategy);
// throws Error("ValidateValue: value 0 is not authorized in NonZero type.")
toApiRequest()
toApiRequest():
string[]
Defined in: src/utils/cairoDataTypes/nonZero.ts:299
Serialize to the felts a contract call carries.
Exactly the felts of the wrapped value : a NonZero is a promise about a value, not a shape around it.
Returns
string[]
the wrapped value's felts, flagged as compiled
Example
const type = 'core::zeroable::NonZero::<core::integer::u8>';
const result = new CairoNonZero(2, type, cairoTypeStrategy).toApiRequest();
// result = ["2"]
decompose()
decompose(
strategyDecompose):any
Defined in: src/utils/cairoDataTypes/nonZero.ts:315
Read the wrapped value back as the plain value a caller reads.
Parameters
strategyDecompose
how to read the value back
Returns
any
the value the NonZero wraps
Throws
when no strategy can read it back
Example
const type = 'core::zeroable::NonZero::<core::integer::u8>';
const result = new CairoNonZero(2, type, cairoTypeStrategy).decompose(cairoTypeStrategy);
// result = 2n