`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 deploy
和 solana 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
字段是Yes
,Assigned Program Id
字段是BPF Loader 2
。
BPF Loader
可以认为是其他编程语言的编译器,非程序账户的账户没有BPF Loader
赋值。
我也会调查确切的差异。
【讨论】:
谢谢!我也会继续我的调查。任何更新我都会在这里发布以上是关于`solana deploy` 和 `solana program deploy` 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
在 localhost 上将程序部署到 solana 的问题
如何通过“@solana/web3.js”和“@solana/spl-token”调用 nft 程序?