初始化solana-test-validator部署程序时部署合约的账户是哪个
答案
从技术实现层面看,通过solana-test-validator启动参数--bpf-program部署的程序,不存在普通用户账户作为部署操作发起方,也不是接收创世代币的账户完成的部署。
具体逻辑如下:
- 这类部署属于创世状态直接写入操作,不是链启动后通过常规部署交易完成的:验证节点初始化创世块时,会直接把你指定的程序ID、编译好的.so程序文件内容写入初始账本的程序账户状态,整个过程发生在出块之前,不需要任何账户签名、支付链上手续费,自然不存在普通用户账户作为部署操作发起方的概念。
- 接收创世代币的账户和这个部署流程完全无关:你命令里
--mint参数指定的是创世SPL代币的铸造地址,默认情况下test-validator只会给本地默认钱包(路径通常为~/.config/solana/id.json)发放初始SOL,这个账户不会参与创世阶段的程序注入流程,也不会因为这个部署操作被扣除任何余额。 - 只有当你在验证节点启动完成后,通过
solana program deploy命令部署程序时,才会使用你本地配置的默认钱包账户作为部署者,由该账户支付部署手续费、作为程序的升级权限持有者。
你使用的启动命令具体行为:
solana-test-validator -r --mint E2F3fsS1HpsLb2VpEgsA5ztfo83CWFWW4jWpC6FvJ6qR --bpf-program J2bPahVXAHqLvc3TUKeJMxfhKWymh4C7mM1PZm4FfpKU ../program/target/deploy/program.so
-r参数:启动前重置本地已有测试验证节点账本--mint参数:将E2F3fsS1HpsLb2VpEgsA5ztfo83CWFWW4jWpC6FvJ6qR设置为创世阶段生成的SPL代币的铸造地址--bpf-program参数:将ID为J2bPahVXAHqLvc3TUKeJMxfhKWymh4C7mM1PZm4FfpKU的程序,直接以你本地路径下的program.so为逻辑内容写入创世块,该程序默认的升级权限会设置为本地默认钱包地址,这个是权限配置,和部署操作的发起方不是一个概念。
内容的提问来源于stack exchange,提问作者Jorge Martinez
相关产品推荐
相关产品推荐

