`solana deploy` 和 `solana program deploy` 之间的区别

Posted

技术标签:

【中文标题】`solana deploy` 和 `solana program deploy` 之间的区别【英文标题】:Difference bewteen `solana deploy` and `solana program deploy` 【发布时间】:2021-12-21 09:03:38 【问题描述】:

我目前正在学习使用 rust 进行 Solana 开发。我按照 hello-world 教程进行操作,想知道运行 solana deploysolana program deploy 之间有什么区别。

我都使用 Solana Devnet 集群进行了测试。

Result of running solana deploy.

Result of running solana program deploy.

我的直觉告诉我solana deploy 正在创建一个简单的 Solana 帐户,而另一个正在创建一个程序帐户。如果无法调用交易,那么使用程序创建一个简单的 Solana 帐户有什么意义?

【问题讨论】:

【参考方案1】:

他们都致力于部署程序,但solana program deploy 通常是推荐的路线。

solana deploy 是较旧的形式,使用 BPF Loader 2 来部署程序。以这种方式部署的程序永远是不可变的。 SPL Token 程序使用这个加载器:https://explorer.solana.com/address/TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA

solana program deploy 是较新的形式,使用 Upgradeable BPF Loader 来部署程序。如果设置了升级权限,则使用此加载程序的程序可以选择升级。否则,如果使用--final 标志部署它们也可以是不可变的,与旧的solana deploy 相同。 SPL 权益池程序使用这个加载器:https://explorer.solana.com/address/SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy

【讨论】:

谢谢,有道理!对于客户端用户,这两种方法是否相同?也就是说,一个 Js API 客户端程序可以与两个程序以相同的方式交互吗? 是的,如果您向程序发送交易,它们从外部看起来完全一样。【参考方案2】:

我不确定确切的区别是什么,但我可以说solana deploy 不会创建一个简单的 Solana 帐户。 因为你可以看到solana deploy部署的账户的executable字段是YesAssigned Program Id字段是BPF Loader 2BPF Loader 可以认为是其他编程语言的编译器,非程序账户的账户没有BPF Loader 赋值。 我也会调查确切的差异。

【讨论】:

谢谢!我也会继续我的调查。任何更新我都会在这里发布

以上是关于`solana deploy` 和 `solana program deploy` 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

在 localhost 上将程序部署到 solana 的问题

如何通过“@solana/web3.js”和“@solana/spl-token”调用 nft 程序?

使用 @solana/web3.js 将元数据添加到 Solana 令牌

Solana RPC API中文文档

如何将程序部署到 Solana - Solana/Rust

我想在 solana 上铸造一个新的代币。如何使用 solana-web3.js 做到这一点?