Class: CairoEthAddress
Defined in: src/utils/cairoDataTypes/ethAddress.ts:30
A Cairo core::starknet::eth_address::EthAddress : an Ethereum address, carried in one felt252
but only 160 bits wide.
On the wire it is a field element like any other, so what this class adds over CairoFelt252 is the narrower bound : an address must fit in 160 bits, and a value past that is refused before any calldata leaves.
A number, a bigint, a decimal string and a hexadecimal string are all read as the same number, so the shape of the input does not survive. Text is not an accepted input : unlike the other Cairo classes, which take a string that spells no number for its UTF-8 bytes, an address has no meaning as text and refuses it rather than encoding it into a number nobody meant.
Example
// the same address, reached three ways
new CairoEthAddress('0x1234').toBigInt(); // 4660n
new CairoEthAddress(4660).toBigInt(); // 4660n
new CairoEthAddress('4660').toBigInt(); // 4660n
Constructors
Constructor
new CairoEthAddress(
data):CairoEthAddress
Defined in: src/utils/cairoDataTypes/ethAddress.ts:61
Build from a number or a numeric string, refusing text and anything wider than 160 bits.
Parameters
data
unknown
the address to carry, within [0, 2^160 - 1]
Returns
CairoEthAddress
Throws
when the value is text, is not a felt252 input, or is out of the EthAddress range
Example
const result = new CairoEthAddress('0x1234').toApiRequest();
// result = ["4660"]
Properties
abiSelector
staticabiSelector:string=ETH_ADDRESS
Defined in: src/utils/cairoDataTypes/ethAddress.ts:49
The abi type this class serializes.
Example
const result = CairoEthAddress.abiSelector;
// result = "core::starknet::eth_address::EthAddress"
data
data:
bigint
Defined in: src/utils/cairoDataTypes/ethAddress.ts:39
The address, always as a bigint.
Example
const result = new CairoEthAddress('0x1234').data;
// result = 4660n
Methods
validate()
staticvalidate(data):void
Defined in: src/utils/cairoDataTypes/ethAddress.ts:127
Throw unless the value can be carried by an EthAddress.
Text is refused first, since an address spelled as words is a mistake rather than a value to encode. What remains is read as a felt252 — which is what refuses a null, an object or an unsupported type — then checked against the 160 bits an Ethereum address occupies.
Parameters
data
unknown
the value to check
Returns
void
Throws
when the value is text, is not a felt252 input, or is out of the EthAddress range
Example
CairoEthAddress.validate('0x1234'); // passes
CairoEthAddress.validate('abc');
// throws Error("Invalid input: an EthAddress cannot be built from text")
CairoEthAddress.validate(2n ** 160n);
// throws Error("Value is out of EthAddress range [0, 1461501637330902918203684832716283019655932542975]")
is()
staticis(data):boolean
Defined in: src/utils/cairoDataTypes/ethAddress.ts:154
Can this value be carried by an EthAddress?
The non-throwing form of CairoEthAddress.validate, so it answers false for every input that one refuses, whatever the reason.
Parameters
data
unknown
the value to test
Returns
boolean
true when the value fits in an EthAddress
Example
const result = CairoEthAddress.is('0x1234');
// result = true
const result2 = CairoEthAddress.is('abc');
// result2 = false (text, not a number)
const result3 = CairoEthAddress.is(2n ** 160n);
// result3 = false (one bit too wide)
isAbiType()
staticisAbiType(abiType):boolean
Defined in: src/utils/cairoDataTypes/ethAddress.ts:175
Is this abi type the one this class serializes?
Parameters
abiType
string
the abi type to test
Returns
boolean
true for core::starknet::eth_address::EthAddress
Example
const result = CairoEthAddress.isAbiType('core::starknet::eth_address::EthAddress');
// result = true
const result2 = CairoEthAddress.isAbiType('core::felt252');
// result2 = false
factoryFromApiResponse()
staticfactoryFromApiResponse(responseIterator):CairoEthAddress
Defined in: src/utils/cairoDataTypes/ethAddress.ts:193
Read one EthAddress off a contract response, advancing the iterator past it.
The felts a node returns are hex strings, and one is consumed per call, so successive calls read successive return values.
Parameters
responseIterator
Iterator<string>
the response felts, positioned on this address
Returns
CairoEthAddress
the address that was read
Example
const response = ['0x1234'];
const result = CairoEthAddress.factoryFromApiResponse(response.values()).toBigInt();
// result = 4660n
toApiRequest()
toApiRequest():
string[]
Defined in: src/utils/cairoDataTypes/ethAddress.ts:75
Serialize to the single felt a contract call carries.
Returns
string[]
one decimal-string felt, flagged as compiled
Example
const result = new CairoEthAddress('0x1234').toApiRequest();
// result = ["4660"]
toBigInt()
toBigInt():
bigint
Defined in: src/utils/cairoDataTypes/ethAddress.ts:88
The address as a number.
Returns
bigint
the number this address holds
Example
const result = new CairoEthAddress('0x1234').toBigInt();
// result = 4660n
toHexString()
toHexString():
string
Defined in: src/utils/cairoDataTypes/ethAddress.ts:106
The address in hexadecimal, without padding.
The 40 hex digits an Ethereum address is usually written with are not restored here : leading zeros are dropped, as they are everywhere else in the library.
Returns
string
the address as a 0x-prefixed hex string
Example
const result = new CairoEthAddress(4660).toHexString();
// result = "0x1234"
const result2 = new CairoEthAddress('0x0034').toHexString();
// result2 = "0x34" (four digits in, two out)