首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RSK上的硬帽子部署脚本抛出UND_ERR_SOCKET

RSK上的硬帽子部署脚本抛出UND_ERR_SOCKET
EN

Ethereum用户
提问于 2022-06-11 19:35:44
回答 2查看 451关注 0票数 1

我正在使用安全帽部署一个智能契约,它成功地部署到Polygon,但是当试图部署到RSK时,它失败了-

代码语言:javascript
复制
$ npx hardhat run scripts/deploy.js --network rsk

SocketError: closed
    at Socket.onSocketClose (./node_modules/undici/lib/client.js:967:31)
    at Socket.emit (events.js:400:28)
    at TCP.<anonymous> (net.js:675:12) {
  code: 'UND_ERR_SOCKET',
  socket: {
    localAddress: undefined,
    localPort: undefined,
    remoteAddress: undefined,
    remotePort: undefined,
    remoteFamily: undefined,
    timeout: undefined,
    bytesWritten: 209,
    bytesRead: 125
  }
}

hardhat.config.js中,RSK的定义如下-

代码语言:javascript
复制
    ...
    networks: {
        rsk: {
            url: '...',
            accounts: [...],
            timeout: 120000,
        },
        polygon: {
            url: '...',
            accounts: [...],
        },
    },
    ...
  1. 它发生在两个不同的同步本地RSKJ节点上,结果相同,但在公共https://public-node.rsk.co节点上工作。
  2. 它过去在我的本地节点上工作过,从那以后什么都没有改变!(据我所知)

那么,我的本地RSK节点会有什么问题呢?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2022-06-22 06:22:34

Hardhat v2.9.7使用undici v4,而后续版本使用undici v5。

要再现错误,请运行此命令,然后运行下面的测试脚本。

代码语言:javascript
复制
npm i --exact undici@4

随后,运行此命令(切换到更新的undici版本),然后再次运行下面的测试脚本。

代码语言:javascript
复制
npm i --exact undici@5

根本原因:undici v5期望HTTP响应包括content-length标题或transfer-encoding头。在上一个版本中,undici v4没有这个要求。

解决办法:将hardhat降级为早期版本: v2.9.7

解决方案:修正发送预期头的RSKj。

测试脚本

代码语言:javascript
复制
const { Client } = require('undici');
const rskRpcUrl =
  process.env.RSK_RPC_URL ||
  'https://public-node.testnet.rsk.co/'; // public node
  // e.g. 'http://localhost:4444/' for local node
const client = new Client(rskRpcUrl);

client.request({
  path: '/',
  method: 'POST',
  body: '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}',
  headers: ["Content-Type", "application/json"],
}, function (err, data) {
  if (err) {
    console.log(err);
    return
  }

  const {
    statusCode,
    headers,
    trailers,
    body
  } = data

  console.log('response received', statusCode)
  console.log('headers', headers)

  body.setEncoding('utf8')
  body.on('data', console.log)
  body.on('end', () => {
    console.log('trailers', trailers)
  })

  client.close()
});
票数 0
EN

Ethereum用户

发布于 2022-09-21 17:11:44

现在看来,这个问题在HOP-4.1.0中已经解决了。https://github.com/rsksmart/rskj/commit/554e549821c05b9977f4f1df1a53cb69e8f5e8b1

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/130028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档