체인의정석

hardhat 에서 HeadersTimeoutError: Headers Timeout Error 해결 법 본문

블록체인/Ethers & web3

hardhat 에서 HeadersTimeoutError: Headers Timeout Error 해결 법

체인의정석 2023. 7. 10. 13:30
728x90
반응형

사용환경 :

typescript, ethers, hardhat

에러 코드 및 발생 상황 :

HeadersTimeoutError: Headers Timeout Error
    at Timeout.onParserTimeout [as _onTimeout] (/Users/chohk/Desktop/git/geteventwinner/node_modules/undici/lib/client.js:902:28)
    at listOnTimeout (node:internal/timers:571:11)
    at processTimers (node:internal/timers:512:7) {
  code: 'UND_ERR_HEADERS_TIMEOUT'
}

만약 hardhat 환경에서 이벤트를 뽑아내거나 view를 호출하는데 양이 많거나 여러 프로세스를 반복문을 통해 자동화 시킨 상황이라면 위지금과 같은 상황이 발생 가능하다.

해결방법 : 


대량의 데이터를 이벤트로 가져와서 json으로 뽑아낸 후 이를 다시 excel로 바꾸는 작업을 진행하였다.

다만 이런 식으로 진행을 하다보니

"HeadersTimeoutError: Headers Timeout Error" 잘 진행이 되다가 해당 에러가 발생하였다.

구글링을 해봤는데 해당 문제를 해결하는 node.js 용 라이브러리는 발견했지만

https://www.npmjs.com/package/connect-timeout

 

connect-timeout

Request timeout middleware for Connect/Express. Latest version: 1.9.0, last published: 6 years ago. Start using connect-timeout in your project by running `npm i connect-timeout`. There are 248 other projects in the npm registry using connect-timeout.

www.npmjs.com

내가 실행을 하려는 hardhat 환경에서는 잘 보이지 않아 hardhat과 조합하여 다시 검색한 결과 사람들이 깃허브 이슈에서 토론한 글을 발견하게 되었다. (이건 내가 실수로 지워버려서 아래 비슷한 내용의 다른 링크를 걸어둔다.)

https://ethereum.stackexchange.com/questions/120530/cannot-override-hardhat-timeout-of-40000ms

 

Cannot override Hardhat Timeout of 40000ms

Issue: I cannot override the default timeout of 40000ms when testing using rinkeby network. I'm getting the error of Timeout of 40000ms exceeded. (Error: Timeout of 40000ms exceeded. For async test...

ethereum.stackexchange.com

아무튼 위와 같이 외국인들이 mocha에 설정한 것을 보고 hardhat.config.ts에서 다음과 같이 설정해 보았다.

  networks: {
    hardhat: {},
    klaytn: {
      url: 'https://klaytn-mainnet-archive.allthatnode.com:8551',
      accounts: [process.env.PRIVATE_KEY!],
    }
  },
  mocha: {
    timeout: 4000000000
  },

그 결과 그냥 스크립트 문 임에도 불구하고 위와 같은 에러가 발생하지 않았다.

에러가 발생한다면 timeout의 수치를 더 높이면 된다.

 

728x90
반응형
Comments