Pointer
A pointer is a way to communicate a data structure between functions. Rather than passing a tuple, for example, a function can pass a pointer. The recipient function can access the values in the tuple by using that pointer.
%lang starknet
from starkware.cairo.common.registers import get_fp_and_pc
@view
func use_pointer(number : felt) -> (res : felt):
# The variable 'tuple' is assigned to the the pointer
# to the tuple returned by the function.
# The variable is of type 'felt*'.
let (tuple) = tuple_maker(number)
# The variable 'val' is set to the value of the third element.
let val = tuple[2]
return (val)
end
# The function returns a pointer to a tuple.
func tuple_maker(val : felt) -> (a_tuple : felt*):
alloc_locals
# Declare a tuple.
local tuple : (felt, felt, felt) = (5, 6, 2*val)
# Local variables are based on the frame pointer, which
# can be accessed with this library module.
let (__fp__, _) = get_fp_and_pc()
# '&' denotes the address, in this case, the address of the tuple.
return (&tuple)
end
Save as pointer.cairo
.
Compile
Then, to compile:
starknet-compile pointer.cairo \
--output pointer_compiled.json \
--abi pointer_contract_abi.json
Deploy
Then, to deploy:
starknet deploy --contract pointer_compiled.json \
--network=alpha
Returns:
Deploy transaction was sent.
Contract address: 0x01952f14c2b56d7e09ef19c9a466de086d2ad65da30008e47a99b8ce7d447146.
Transaction ID: 555662.
Note: Remove the zero after the x
, 0x[0]12345. E.g., 0x0123abc becomes 0x123abc.
Monitor
Check the status of the transaction:
starknet tx_status --network=alpha --id=555662
Returns:
{
"block_id": 26445,
"tx_status": "PENDING"
}
Interact
Then, to interact:
starknet call \
--network=alpha \
--address 0x1952f14c2b56d7e09ef19c9a466de086d2ad65da30008e47a99b8ce7d447146 \
--abi pointer_contract_abi.json \
--function use_pointer \
--inputs 43
Returns:
86
Status options:
- NOT_RECEIVED: The transaction has not been received yet (i.e., not written to storage).
- RECEIVED: The transaction was received by the operator.
- PENDING: The transaction passed the validation and is waiting to be sent on-chain.
- REJECTED: The transaction failed validation and thus was skipped.
- ACCEPTED_ONCHAIN: The transaction was accepted on-chain.
- PENDING: The transaction passed the validation and is waiting to be sent on-chain.
Visit the voyager explorer to see the transactions.