预测式部署

预测式合约是指我们甚至可以在实际将其部署到链上之前进行交互的合约。 例如,我们可以向一个尚未存在的合约发送资金或分配权限。 为什么?因为 Starknet 中的部署是确定性的,允许我们预测合约将被部署到的地址。 我们可以利用此属性,通过提前发送资金来使合约支付其自身的部署费用。我们称之为预测式部署。

此过程可以用以下步骤描述:

要测试此流程,您可以查看 {foundry}{starkli} 指南以了解如何部署账户。
  1. 通过给定的 class_hashsalt 和构造函数 calldata 确定性地预先计算 contract_address。 请注意,必须先声明 class_hash 才能成功部署。

  2. 将资金发送到 contract_address。通常,您会首先估算交易费用。现有的 工具通常会为您执行此操作。

  3. 向网络发送 DeployAccount 类型的交易。

  4. 然后,协议将使用要部署的合约的 __validate_deploy__ 入口点验证交易。

  5. 如果验证成功,协议将收取费用,然后将合约注册为已部署。

尽管此方法非常流行用于部署账户,但这适用于任何类型的合约。

部署验证

要进行预测式部署,部署合约必须实现 __validate_deploy__ 入口点, 当 DeployAccount 交易发送到网络时,该入口点由协议调用。

trait IDeployable {
    /// 当验证成功时,必须返回 'VALID'。
    fn __validate_deploy__(
        class_hash: felt252, contract_address_salt: felt252, public_key: felt252
    ) -> felt252;
}