部署智能合约时的错误请求

Bad request when deploying smart contract

所以我目前正在尝试部署路由器智能合约。我一直在通过 erdpy contract build 构建它,这是成功的(我在 rust nightly 工具链上,因为智能合约需要它)。我现在正在尝试部署它,但我无法做到。我一直有来自 https://devnet-api.elrond.com/transaction/send400 BadRequest

以下是部署日志:

erdpy contract deploy
INFO:accounts:Account.sync_nonce()
INFO:accounts:Account.sync_nonce() done: 0
INFO:cli.contracts:Contract address: erd1qqqqqqqqqqqqqpgqzqv7kk893c3ftwgaekvvv9whpqcfn4kazqxq3mud36
INFO:transactions:Transaction.send: nonce=0
CRITICAL:cli:Proxy request error for url [https://devnet-api.elrond.com/transaction/send]: {'statusCode': 400, 'message': 'Bad Request'}

这里是erdpy.json用于配置的命令:

{
    "configurations": {
        "default": {
            "proxy": "https://devnet-api.elrond.com",
            "chainID": "D"
        }
    },
    "contract":{
        "deploy":{
            "verbose": true,
            "bytecode": "output/router.wasm",
            "recall-nonce": true,
            "nonce": 1,
            "pem": "../../../wallets/owner/wallet-owner.pem",
            "gas-limit": 600000000,
            "send": true,
            "outfile": "deploy-testnet.interaction.json"
        }
    }
}

我试图部署的合约是 following. I've also been through the OpenAPI Spec or the documentation 寻找答案,但没有任何答案。此路由通常会返回错误消息,但对于这种特定情况,它不会。

一些其他合约,如 ping-pong 使用相同的 erdpy.json 配置正常工作。

我试过用参数 --verbose 部署吗?

应该是这样的(不确定语法,因为我在 phone) erdpy --verbose contract deploy

在与对此问题感兴趣的人交谈后,我得到了以下命令:

erdpy --verbose contract deploy --project=$PROJECT_NAME --pem="wallet-owner.pem" --gas-limit=600000000 --proxy="https://devnet-gateway.elrond.com" --outfile="elrond.workspace.json" --recall-nonce --send --chain="D"

$PROJECT_NAME替换为您合约的文件夹(您需要比您的智能合约文件夹高一级)。

它不会使用 elrond.json 文件,但我想您可以将文件上移以使命令使用它。

我也遇到了“错误请求”错误,我发现这是因为我的钱包是空的。将 xEGLD 添加到您的开发网络钱包:

  1. 转到https://devnet-wallet.elrond.com/faucet
  2. 使用您的 pem 文件登录/您通常用来登录的任何文件
  3. 点击左侧菜单中的“水龙头”选项
  4. 这应该会弹出一个模式,向您的钱包添加 10 xEGLD(您可以每 24 小时请求 10 xEGLD)
  5. 现在您可以 return 到终端和 运行 erdpy contract deploy

这对我有用,现在我得到了正确的输出。

在 Elrond Docs 建议的 erdpy.json 中,configuration.default 对象中有一个 "chainID": "D" 变量。

删除此内容并在 contract.deploy 中添加此内容:"chain": "D".

例子

{
  "configurations": {
    "default": {
      "proxy": "https://devnet-api.elrond.com"
      "chainID": "D" <----- Delete this
    }
  },
  "contract":{
    "deploy":{
      <Other fields>
      "chain": "D" <----- Add this
    }
  }
}