Skip to content
🎉 Welcome to the new Aptos Docs! Click here to submit an issue.
构建Smart Contracts (Move)Deployment | 部署

对象代码部署

本文档介绍如何将代码部署到 Objects。这是将代码部署到区块链的推荐方式,因为这减少了部署的复杂性,并安全地管理代码所有者的访问控制策略。请注意,在此上下文中,代码是指 packages

将代码部署到对象将保证以下几点:

  • 每次部署发布到一个新地址。
  • 只有代码对象的所有者可以升级和冻结代码。

这意味着您可以将对象转移给新所有者,他们将拥有代码的完整所有权。您正在授予他们升级和冻结代码的权利。无需管理种子,或在每次部署时部署到新地址。对象代码部署极大地简化了部署过程。

指南

以下是如何编译、部署和升级代码到对象的说明。

编译代码

确保 <named_address> 保持为占位符 _。这是必需的,因为 CLI 命令将覆盖地址。<named_address> 值表示代码的所有者,或要将代码部署到的对象的所有者。 以下是 <named_address> 值为 my_address 的示例。

Move.toml
[addresses]
my_address = "_"

通过运行以下命令编译您的 move 代码。

  • <named_address> 替换为命名地址。
  • <your_address> 替换为您的账户地址。
Terminal
aptos move compile --named-addresses <named_address>=<your_address>

将代码部署到对象

通过以下命令将编译后的代码部署到对象:

  • <named_address> 替换为命名地址。
Terminal
aptos move deploy-object --address-name <named_address>

下面是一个示例:

Terminal
aptos move deploy-object --address-name my_address

这将询问您是否要在指定的对象地址下发布代码。

示例输出:

Terminal
Do you want to publish this package at object address 0x8d6eb306bcf6c61dbaa0dbf8daa8252e121b63e95991afcab3b12d3be7f001ab [yes/no] >

恭喜,您已将代码部署到具有唯一地址的新对象!

请注意对象地址,因为您稍后需要它进行升级。

转移和升级现有包中的代码

首先,您可能希望将对象从部署者账户转移到管理员账户。管理员账户将有权升级代码。

以下是通过 CLI 的操作方法,这里您的 deployer_account 应该是对象的当前所有者。

aptos move run —-function-id 0x1::object::transfer --type-args 0x1::object::ObjectCore -—args address:<object_address> address:<new_owner_address> —-profile <deployer_account_profile>

以下是通过 typescript SDK 的操作方法:

const transaction = await aptos.transaction.build.simple({
  sender: deployerAccount.accountAddress,
  data: {
	  function: "0x1::object::transfer",
      typeArguments: [`0x1::object::ObjectCore`],
	  functionArguments: [object_address, new_owner_address],
  },
});

现在,您可以使用指定的管理员账户升级代码,如下所示。

如果您希望升级已部署的对象中的代码,请运行以下命令:

  • <named_address> 替换为现有的命名地址。
  • <code_object_addr> 替换为托管代码的对象地址。

注意:账户名称的值现在应该是对象地址,因为包含模块的包现在已部署到该地址。

Terminal
aptos move upgrade-object --address-name <named_address> --object-address <code_object_addr>

上述命令的示例:

Terminal
aptos move upgrade-object --address-name my_address --object-address 0x8d6eb306bcf6c61dbaa0dbf8daa8252e121b63e95991afcab3b12d3be7f001ab

这将询问您是否要升级在对象地址上部署的现有代码。

示例输出:

Terminal
Do you want to upgrade the package 'MyPackage' at object address 0x8d6eb306bcf6c61dbaa0dbf8daa8252e121b63e95991afcab3b12d3be7f001ab [yes/no]

恭喜,您已在现有对象中升级了代码!