Contract ABI
Contract ABI is a representation of a Starknet contract’s interface. It is formatted as JSON and describes the functions, structs and events which are defined in the contract.
You can get the contract’s ABI by compiling:
-
Cairo 0
-
Cairo 1.0
starknet-compile contract.cairo \
--output contract_compiled.json \
--abi contract_abi.json
cargo run --bin starknet-compile -- /path/to/input.cairo /path/to/output.json
The following is an example contract ABI:
-
Cairo 0
-
Cairo 1.0
[
{
"members": [
{
"name": "x",
"offset": 0,
"type": "felt"
},
{
"name": "y",
"offset": 1,
"type": "felt"
}
],
"name": "Point",
"size": 2,
"type": "struct"
},
{
"members": [
{
"name": "x",
"offset": 0,
"type": "felt"
},
{
"name": "p",
"offset": 1,
"type": "Point"
}
],
"name": "Test",
"size": 3,
"type": "struct"
},
{
"data": [
{
"name": "a",
"type": "felt"
},
{
"name": "b",
"type": "felt"
}
],
"keys": [],
"name": "status_update",
"type": "event"
},
{
"inputs": [
{
"name": "a_len",
"type": "felt"
},
{
"name": "a",
"type": "felt*"
}
],
"name": "constructor",
"outputs": [],
"type": "constructor"
},
{
"inputs": [
{
"name": "user",
"type": "felt"
}
],
"name": "extend_range",
"outputs": [],
"type": "function"
},
{
"inputs": [
{
"name": "points_len",
"type": "felt"
},
{
"name": "points",
"type": "(felt, Point, Point)*"
}
],
"name": "input_arrays",
"outputs": [],
"type": "function"
},
{
"inputs": [
{
"name": "nested_len",
"type": "felt"
},
{
"name": "nested",
"type": "Test*"
}
],
"name": "input_nested_arrays",
"outputs": [
{
"name": "res",
"type": "felt"
}
],
"type": "function"
},
{
"inputs": [
{
"name": "array_len",
"type": "felt"
},
{
"name": "array",
"type": "felt*"
}
],
"name": "output_arrays",
"outputs": [
{
"name": "array_len",
"type": "felt"
},
{
"name": "array",
"type": "felt*"
}
],
"type": "function"
},
{
"inputs": [
{
"name": "points",
"type": "(Point, Point)"
}
],
"name": "input_output_struct",
"outputs": [
{
"name": "res",
"type": "Point"
}
],
"type": "function"
}
]
[
{
"type": "function",
"name": "constructor",
"inputs": [
{
"name": "name_",
"type": "core::felt252"
},
{
"name": "symbol_",
"type": "core::felt252"
},
{
"name": "decimals_",
"type": "core::integer::u8"
},
{
"name": "initial_supply",
"type": "core::integer::u256"
},
{
"name": "recipient",
"type": "core::starknet::contract_address::ContractAddress"
}
],
"outputs": [],
"state_mutability": "external"
},
{
"type": "function",
"name": "get_name",
"inputs": [],
"outputs": [
{
"type": "core::felt252"
}
],
"state_mutability": "view"
},
{
"type": "function",
"name": "get_symbol",
"inputs": [],
"outputs": [
{
"type": "core::felt252"
}
],
"state_mutability": "view"
},
{
"type": "function",
"name": "get_decimals",
"inputs": [],
"outputs": [
{
"type": "core::integer::u8"
}
],
"state_mutability": "view"
},
{
"type": "function",
"name": "get_total_supply",
"inputs": [],
"outputs": [
{
"type": "core::integer::u256"
}
],
"state_mutability": "view"
},
{
"type": "function",
"name": "balance_of",
"inputs": [
{
"name": "account",
"type": "core::starknet::contract_address::ContractAddress"
}
],
"outputs": [
{
"type": "core::integer::u256"
}
],
"state_mutability": "view"
},
{
"type": "function",
"name": "allowance",
"inputs": [
{
"name": "owner",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "spender",
"type": "core::starknet::contract_address::ContractAddress"
}
],
"outputs": [
{
"type": "core::integer::u256"
}
],
"state_mutability": "view"
},
{
"type": "function",
"name": "transfer",
"inputs": [
{
"name": "recipient",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "amount",
"type": "core::integer::u256"
}
],
"outputs": [],
"state_mutability": "external"
},
{
"type": "function",
"name": "transfer_from",
"inputs": [
{
"name": "sender",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "recipient",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "amount",
"type": "core::integer::u256"
}
],
"outputs": [],
"state_mutability": "external"
},
{
"type": "function",
"name": "approve",
"inputs": [
{
"name": "spender",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "amount",
"type": "core::integer::u256"
}
],
"outputs": [],
"state_mutability": "external"
},
{
"type": "function",
"name": "increase_allowance",
"inputs": [
{
"name": "spender",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "added_value",
"type": "core::integer::u256"
}
],
"outputs": [],
"state_mutability": "external"
},
{
"type": "function",
"name": "decrease_allowance",
"inputs": [
{
"name": "spender",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "subtracted_value",
"type": "core::integer::u256"
}
],
"outputs": [],
"state_mutability": "external"
},
{
"type": "event",
"name": "Transfer",
"inputs": [
{
"name": "from",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "to",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "value",
"type": "core::integer::u256"
}
]
},
{
"type": "event",
"name": "Approval",
"inputs": [
{
"name": "owner",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "spender",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "value",
"type": "core::integer::u256"
}
]
}
]
The Cairo 0 compiler is no longer maintained, see here for more details on Cairo 1 contracts compilation. |