Rename `DeployAccount` transaction to something else like `DeployFunded`?

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:

  1. Rename DeployAccount to something else like DeployFunded that more accurately describes the nature of this transaction type
  2. Turn DeployAccount into Deploy v1.
23 Likes