For those who don’t know, StarkNet v0.10.1 introduced a new transaction type called DeployAccount
, aiming to solve the chicken-and-egg problem regarding account deployment: you couldn’t deploy an account unless you already own one. The DeployAccount
transaction is meant to replace the current Deploy
transaction type which is free of charge.
However, I find the naming of this new transaction type extremely misleading. It gives the impression that only account contracts can be deployed this way, as in the contract must have entrypoints like __execute__
etc.
To illustrate that any contract can be deployed with DeployAccount
, I sent this transaction to StarkNet Goerli, and it executes just fine. The source code of this contract is simply:
%lang starknet
from starkware.cairo.common.cairo_builtins import HashBuiltin, SignatureBuiltin, BitwiseBuiltin
@constructor
func constructor(arg: felt) {
return ();
}
@external
func __validate_deploy__{}(class_hash: felt, contract_address_salt: felt, arg: felt) {
return ();
}
which is clearly not an account contract.
Is StarkWare naming it like this on purpose to explicitly discourage deploying contracts this way? Something related to malicious sequencers setting arbitrary max fee?
If that’s not the case, I see 2 options here:
- Rename
DeployAccount
to something else likeDeployFunded
that more accurately describes the nature of this transaction type - Turn
DeployAccount
intoDeploy
v1.