跳转到内容

OTP-005:参数可寻址合同

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

动机

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

规格

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

前缀

前缀由智能合约自行定义,但默认情况下假定为 “单个零位”。 合同代码使用前缀来区分已部署和未部署状态。

参数 编码

参数使用 [Auto Encoder](/ref/evolution/otp-004)编码。

合同要求

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

缺点

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