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 contract leveraging AccountComponent.
0x04a444ef8caf8fa0db05da60bf0ad9bae264c73fa7e32c61d245406f5523174b
EthAccountUpgradeable
use openzeppelin_presets::EthAccountUpgradeable;
Upgradeable account contract leveraging EthAccountComponent.
The EthPublicKey type is an alias for starknet::secp256k1::Secp256k1Point .
|
0x04bc5fe3c036a449c3e2302581aaf3c863d49a3911aa80765cf7c33886114154