跳转到内容

OTP-005: 可选择地址的合同

该提案定义了一种通过参数而非初始数据来处理合约的方法。

动机

Init 数据可能与参数非常不同。 这样,我们就能避免在当前合约的上下文中执行来自另一个合约的不受信任的代码,或在链外执行 TVM 代码进行部署,而这在某些情况下可能会有风险。

技术说明

本规范定义了一种将参数写入初始化数据cell的方法,以便在部署过程中由合约代码读取。

前缀

前缀由智能合约本身定义,但默认情况下,假定为“单个零位 (single zero bit)”。 合约代码使用前缀来区分已部署和未部署状态。

参数 编码

参数使用 Auto Encoder 编码。

合约要求

  • 合约必须暴露 lazy_deployment_completed 获取方法,如果合约已部署,则返回 true,否则返回 false
  • 合约必须暴露 org.ton.deploy.lazy.v0 接口。

缺点

  • 合约可能处于半部署状态
  • 有多种写参数的方法,最终会产生不同的初始数据和不同的地址
  • 您可以部署一个预初始化的合约,它将有一个不同的地址,但功能完整
  • 部署时无法预测的gas用量。 部署费用通常很高,但这项建议使费用更加高昂。