我无法使用锚点将程序部署到开发网
I can not deploy the program to dev net with anchor
我在 运行 anchor deploy
:
处收到此错误
Deploying workspace: http://127.0.0.1:8899
Upgrade authority: /home/<user>/.config/solana/id.json
Deploying program "faucet"...
Program path: /home/<user>/Workspace/<project_path>/target/deploy/xxx.so...
Error: RPC request error: cluster version query failed: error sending request for url (http://127.0.0.1:8899/): error trying to connect: tcp connect error: Connection refused (os error 111)
There was a problem deploying: Output { status: ExitStatus(ExitStatus(256)), stdout: "", stderr: "" }.
在部署之前,我已经运行以下更改本地的集群配置:
solana config set --url https://api.devnet.solana.com
我该如何解决这个问题?
您的错误表明您实际上是在尝试部署到本地,但您的本地已关闭。部署到本地以外的集群时,需要加上
anchor deploy --provider.cluster devnet
您可以从
获得更多帮助
anchor --help
您的错误清楚地表明,当您尝试部署到您的本地网络时,它没有启动并且 运行ning。因此,您只需打开一个新终端 window 和 运行:
solana-keygen new
将助记词和其他相关详细信息保存在安全的地方,然后,运行
solana-test-validator
现在,在您之前尝试部署的单独终端 window 中,键入
anchor deploy
再次进行,应该会成功部署。
否则,如果您尝试在任何其他网络上进行部署,例如 devnet。然后你会想要空投一些 SOL 到 运行ning solana-keygen new
之后生成的帐户,使用命令:
solana airdrop 1 <RECIPIENT_ACCOUNT_ADDRESS> --url https://api.devnet.solana.com
然后在部署命令中使用额外的标志,如下所示:
anchor deploy --provider.cluster devnet
今天我在尝试部署到 devnet 时遇到了同样的错误,原来这只是因为 devnet 已关闭。
如果您一直在尝试部署但没有成功,您可以检查网络是否正常并且运行:https://status.solana.com/
例如,您可以看到 Solana 的开发网络在撰写此答案的当天遭遇重大中断,请记住这种可能性,尽管这种情况很少见。
solana config set --url devnet
Config File: /home/.config/solana/cli/config.yml
RPC URL: https://api.devnet.solana.com
WebSocket URL: wss://api.devnet.solana.com/ (computed)
Keypair Path: /home/.config/solana/id.json
Commitment: confirmed
solana config get
这就是 anchor 知道将 solana 程序部署到哪里的方式。我们需要空投
solana airdrop 2 --url devnet
solana balance --url devnet
打开 anchor.toml 文件。更新文件
// [programs.localnet] change to devnet
[programs.devnet]
// cluster = "localnet" change to devnet
cluster = "devnet"
anchor build
这将创建一个具有新 programId 的新版本。访问此程序 ID
solana address -k target/deploy/yourprojectname-keypair.json
这将为您提供已部署合约的 programId
- 现在 lib.rs 和 anchor.toml 使用此代码更新 declareId。
lib.rs
declare_id!("paste the programId of deployed contract");
anchor.toml
yourProjectName = "paste the programId of deployed contract"
现在运行又anchor build
现在我们准备部署
anchor deploy
我在 运行 anchor deploy
:
Deploying workspace: http://127.0.0.1:8899
Upgrade authority: /home/<user>/.config/solana/id.json
Deploying program "faucet"...
Program path: /home/<user>/Workspace/<project_path>/target/deploy/xxx.so...
Error: RPC request error: cluster version query failed: error sending request for url (http://127.0.0.1:8899/): error trying to connect: tcp connect error: Connection refused (os error 111)
There was a problem deploying: Output { status: ExitStatus(ExitStatus(256)), stdout: "", stderr: "" }.
在部署之前,我已经运行以下更改本地的集群配置:
solana config set --url https://api.devnet.solana.com
我该如何解决这个问题?
您的错误表明您实际上是在尝试部署到本地,但您的本地已关闭。部署到本地以外的集群时,需要加上
anchor deploy --provider.cluster devnet
您可以从
获得更多帮助anchor --help
您的错误清楚地表明,当您尝试部署到您的本地网络时,它没有启动并且 运行ning。因此,您只需打开一个新终端 window 和 运行:
solana-keygen new
将助记词和其他相关详细信息保存在安全的地方,然后,运行
solana-test-validator
现在,在您之前尝试部署的单独终端 window 中,键入
anchor deploy
再次进行,应该会成功部署。
否则,如果您尝试在任何其他网络上进行部署,例如 devnet。然后你会想要空投一些 SOL 到 运行ning solana-keygen new
之后生成的帐户,使用命令:
solana airdrop 1 <RECIPIENT_ACCOUNT_ADDRESS> --url https://api.devnet.solana.com
然后在部署命令中使用额外的标志,如下所示:
anchor deploy --provider.cluster devnet
今天我在尝试部署到 devnet 时遇到了同样的错误,原来这只是因为 devnet 已关闭。
如果您一直在尝试部署但没有成功,您可以检查网络是否正常并且运行:https://status.solana.com/
例如,您可以看到 Solana 的开发网络在撰写此答案的当天遭遇重大中断,请记住这种可能性,尽管这种情况很少见。
solana config set --url devnet
Config File: /home/.config/solana/cli/config.yml RPC URL: https://api.devnet.solana.com WebSocket URL: wss://api.devnet.solana.com/ (computed) Keypair Path: /home/.config/solana/id.json Commitment: confirmed
solana config get
这就是 anchor 知道将 solana 程序部署到哪里的方式。我们需要空投
solana airdrop 2 --url devnet
solana balance --url devnet
打开 anchor.toml 文件。更新文件
// [programs.localnet] change to devnet [programs.devnet] // cluster = "localnet" change to devnet cluster = "devnet"
anchor build
这将创建一个具有新 programId 的新版本。访问此程序 ID
solana address -k target/deploy/yourprojectname-keypair.json
这将为您提供已部署合约的 programId
- 现在 lib.rs 和 anchor.toml 使用此代码更新 declareId。
lib.rs
declare_id!("paste the programId of deployed contract");
anchor.toml
yourProjectName = "paste the programId of deployed contract"
现在运行又
anchor build
现在我们准备部署anchor deploy