我无法使用锚点将程序部署到开发网

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