Account
This crate provides components to implement account contracts that can be used for interacting with the network.
Core
ISRC6
use openzeppelin_account::interface::ISRC6;
Interface of the SRC6 Standard Account as defined in the SNIP-6.
0x2ceccef7f994940b3962a6c67e0ba4fcd37df7d131417c604f91e03caecc1cd
__execute__(calls: Array<Call>) → Array<Span<felt252>>
external
Executes the list of calls as a transaction after validation.
Returns an array with each call’s output.
The Call struct is defined in corelib.
|
AccountComponent
use openzeppelin_account::AccountComponent;
Account component implementing ISRC6
for signatures over the Starknet curve.
Implementing SRC5Component is a requirement for this component to be implemented. |
__execute__(self: @ContractState, calls: Array<Call>) → Array<Span<felt252>>
external
See ISRC6::__execute__.
__validate__(self: @ContractState, calls: Array<Call>) → felt252
external
See ISRC6::__validate__.
is_valid_signature(self: @ContractState, hash: felt252, signature: Array<felt252>) → felt252
external
__validate_declare__(self: @ContractState, class_hash: felt252) → felt252
external
Validates a Declare
transaction.
Returns the short string 'VALID'
if valid, otherwise it reverts.
__validate_deploy__(self: @ContractState, class_hash: felt252, contract_address_salt: felt252, public_key: felt252) → felt252
external
Validates a DeployAccount
transaction.
See Counterfactual Deployments.
Returns the short string 'VALID'
if valid, otherwise it reverts.
get_public_key(self: @ContractState) → felt252
external
Returns the current public key of the account.
set_public_key(ref self: ContractState, new_public_key: felt252, signature: Span<felt252>)
external
Sets a new public key for the account. Only accessible by the account calling itself through __execute__
.
Requirements:
-
The caller must be the contract itself.
-
The signature must be valid for the new owner.
Emits both an OwnerRemoved and an OwnerAdded event.
The message to be signed is computed in Cairo as follows:
|
getPublicKey(self: @ContractState) → felt252
external
See get_public_key.
setPublicKey(ref self: ContractState, newPublicKey: felt252, signature: Span<felt252>)
external
See set_public_key.
initializer(ref self: ComponentState, public_key: felt252)
internal
Initializes the account with the given public key, and registers the ISRC6
interface ID.
Emits an OwnerAdded event.
assert_only_self(self: @ComponentState)
internal
Validates that the caller is the account itself. Otherwise it reverts.
assert_valid_new_owner(self: @ComponentState, current_owner: felt252, new_owner: felt252, signature: Span<felt252>)
internal
Validates that new_owner
accepted the ownership of the contract through a signature.
Requirements:
-
signature
must be valid for the new owner.
This function assumes that current_owner is the current owner of the contract, and
does not validate this assumption.
|
validate_transaction(self: @ComponentState) → felt252
internal
Validates a transaction signature from the global context.
Returns the short string 'VALID'
if valid, otherwise it reverts.
_set_public_key(ref self: ComponentState, new_public_key: felt252)
internal
Set the public key without validating the caller.
Emits an OwnerAdded event.
The usage of this method outside the set_public_key function is discouraged.
|
EthAccountComponent
use openzeppelin_account::eth_account::EthAccountComponent;
Account component implementing ISRC6
for signatures over the Secp256k1 curve.
Implementing SRC5Component is a requirement for this component to be implemented. |
The EthPublicKey type is an alias for starknet::secp256k1::Secp256k1Point .
|
__execute__(self: @ContractState, calls: Array<Call>) → Array<Span<felt252>>
external
See ISRC6::__execute__.
__validate__(self: @ContractState, calls: Array<Call>) → felt252
external
See ISRC6::__validate__.
is_valid_signature(self: @ContractState, hash: felt252, signature: Array<felt252>) → felt252
external
__validate_declare__(self: @ContractState, class_hash: felt252) → felt252
external
Validates a Declare
transaction.
Returns the short string 'VALID'
if valid, otherwise it reverts.
__validate_deploy__(self: @ContractState, class_hash: felt252, contract_address_salt: felt252, public_key: EthPublicKey) → felt252
external
Validates a DeployAccount
transaction.
See Counterfactual Deployments.
Returns the short string 'VALID'
if valid, otherwise it reverts.
get_public_key(self: @ContractState) → EthPublicKey
external
Returns the current public key of the account.
set_public_key(ref self: ContractState, new_public_key: EthPublicKey, signature: Span<felt252>)
external
Sets a new public key for the account. Only accessible by the account calling itself through __execute__
.
Requirements:
-
The caller must be the contract itself.
-
The signature must be valid for the new owner.
Emits both an OwnerRemoved and an OwnerAdded event.
The message to be signed is computed in Cairo as follows:
|
getPublicKey(self: @ContractState) → EthPublicKey
external
See get_public_key.
setPublicKey(ref self: ContractState, newPublicKey: EthPublicKey, signature: Span<felt252>)
external
See set_public_key.
initializer(ref self: ComponentState, public_key: EthPublicKey)
internal
Initializes the account with the given public key, and registers the ISRC6
interface ID.
Emits an OwnerAdded event.
assert_only_self(self: @ComponentState)
internal
Validates that the caller is the account itself. Otherwise it reverts.
assert_valid_new_owner(self: @ComponentState, current_owner: EthPublicKey, new_owner: EthPublicKey, signature: Span<felt252>)
internal
Validates that new_owner
accepted the ownership of the contract through a signature.
Requirements:
-
The signature must be valid for the
new_owner
.
This function assumes that current_owner is the current owner of the contract, and
does not validate this assumption.
|
validate_transaction(self: @ComponentState) → felt252
internal
Validates a transaction signature from the global context.
Returns the short string 'VALID'
if valid, otherwise it reverts.
_set_public_key(ref self: ComponentState, new_public_key: EthPublicKey)
internal
Set the public key without validating the caller.
Emits an OwnerAdded event.
The usage of this method outside the set_public_key function is discouraged.
|
Extensions
ISRC9_V2
use openzeppelin_account::extensions::src9::ISRC9_V2;
Interface of the SRC9 Standard as defined in the SNIP-9.
0x1d1144bb2138366ff28d8e9ab57456b1d332ac42196230c3a602003c89872
execute_from_outside_v2(outside_execution: OutsideExecution, signature: Span<felt252>,) → Array<Span<felt252>>
external
Allows anyone to submit a transaction on behalf of the account as long as they have the relevant signatures.
This method allows reentrancy. A call to __execute__
or execute_from_outside_v2
can trigger
another nested transaction to execute_from_outside_v2
thus the implementation MUST verify
that the provided signature
matches the hash of outside_execution
and that nonce
was
not already used.
The implementation should expect version to be set to 2 in the domain separator.
Arguments:
-
outside_execution
- The parameters of the transaction to execute. -
signature
- A valid signature on the SNIP-12 message encoding ofoutside_execution
.
SRC9Component
use openzeppelin_account::extensions::SRC9Component;
OutsideExecution component implementing ISRC9_V2
.
This component is signature-agnostic, meaning it can be integrated into any account contract, as long as the account implements the ISRC6 interface. |
execute_from_outside_v2(ref self: ContractState, outside_execution: OutsideExecution, signature: Span<felt252>) → Array<Span<felt252>>
external
Allows anyone to submit a transaction on behalf of the account as long as they have the relevant signatures.
This method allows reentrancy. A call to __execute__
or execute_from_outside_v2
can
trigger another nested transaction to execute_from_outside_v2
. This implementation
verifies that the provided signature
matches the hash of outside_execution
and that
nonce
was not already used.
Arguments:
-
outside_execution
- The parameters of the transaction to execute. -
signature
- A valid signature on the SNIP-12 message encoding ofoutside_execution
.
Requirements:
-
The caller must be the
outside_execution.caller
unless 'ANY_CALLER' is used. -
The current time must be within the
outside_execution.execute_after
andoutside_execution.execute_before
span. -
The
outside_execution.nonce
must not be used before. -
The
signature
must be valid.
Presets
AccountUpgradeable
use openzeppelin_presets::AccountUpgradeable;
Upgradeable account which can change its public key and declare, deploy, or call contracts. Supports outside execution by implementing SRC9.
0x02b31e19e45c06f29234e06e2ee98a9966479ba3067f8785ed972794fdb0065c
EthAccountUpgradeable
use openzeppelin_presets::EthAccountUpgradeable;
Upgradeable account which can change its public key and declare, deploy, or call contracts, using Ethereum signing keys. Supports outside execution by implementing SRC9.
The EthPublicKey type is an alias for starknet::secp256k1::Secp256k1Point .
|
0x02ba7c42372cf971c8ee60166544e7ff72c2e38bc2835d7edd89b327b1000d8b