Caver-js timeout 설정 문의드립니다

안녕하세요. caver-js 관련 문의드립니다.

컨트랙트로부터 정보를 가져오려고 할때 가끔
Returned error: execution aborted (timeout = 5s)
이라는 에러가 발생하더라고요. 그래서 timeout 을 늘리고자

let balanceOf = async ()=>{
  const URL = "https://public-node-api.klaytnapi.com/v1/cypress"
  const caver = new Caver(new Caver.providers.HttpProvider(URL, {timeout: 10000}));
  const contract = new caver.klay.Contract(abi);
  contract.options.address = "0xf3b576451b0601813edee3ba399d921c3937efae";

  const result = await contract.methods.balanceOf("0xc134151d01f5b7845970a1fbc4fd39b9988ee96f").call().then((data) => {
    return data;
  }).catch((err)=>{
    throw err
  });
  console.log(result)
}
(async()=> {
  await balanceOf();
})();

대략 이런식으로 테스트해봤는데

/Users/harry/Codes/private-project/node_modules/caver-js/packages/caver-core-helpers/src/errors.js:85
        return new Error(`Returned error: ${message}`)
               ^

Error: Returned error: execution aborted (timeout = 5s)
    at Object.ErrorResponse (/Users/harry/Codes/private-project/node_modules/caver-js/packages/caver-core-helpers/src/errors.js:85:16)
    at /Users/harry/Codes/private-project/node_modules/caver-js/packages/caver-core-requestmanager/src/index.js:155:44
    at /Users/harry/Codes/private-project/node_modules/caver-js/packages/caver-core-requestmanager/caver-providers-http/src/index.js:153:17
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

여전히 동일한 에러가 발생하더라고요.

혹시 timeout을 별도로 늘리는 방법은 없을까요?
options 에 {timeout: 10000} (10초) 로 설정했는데 로그에는 왜 timeout = 5s 로 찍히는 걸까요?

klaytn 코드에도

if evm.Cancelled() {
		return nil, 0, 0, 0, fmt.Errorf("execution aborted (timeout = %v)", timeout)
	}

이렇게 있는걸 봐서는 설정한 time이 찍혀서 의문이네요… 혹시 제가 빼먹은 옵션이나 실수가 있을까요? 감사합니다

추가로

const result = await contract.methods.totalSupply().call({timeout: 7000}).then((data) => {

이런식으로 call() 안에 옵션넣어서 시도도 해보고,
HttpProvider랑 call() 안에 둘다 옵션 넣어서 시도해봤는데 같은 에러 발생합니다 ㅠㅠ 혹시 노드 설정을 바꿔줘야하는 부분일까요…ㅠㅠ

안녕하세요 timeout은 노드에 설정이 되어있는 부분이라 client에서 변경하지 못합니다.

현재 퍼블릭 EN에 테스트하시는것같은데 개별적으로도 노드를 운영중이신가요?

답변 감사합니다. 개별 노드를 띄워놓긴했는데 용량이 너무 방대해서 중지시켜둔 상태입니다. 퍼블릭노드를 사용하는 동안에는 별다른 수가 없겠네요,

컨트랙트 balanceOf는 직접 작성하신건가요?

직접 작성한 건 아닙니다. 표준 KIP17 contract 로 만들어졌거나 대부분의 nft는 balanceOf 했을때 별 이상이 없는데 저 token (0xf3b576451b0601813edee3ba399d921c3937efae) 만 신기하게 balanceOf 조회했을때 TImeout이 나서 궁금해서 연구하고 있었습니다.

dm으로 ABI주시면 한번 테스트해볼게요

감사합니다! 혹시 노드에서 설정하는 부분 어디 있는지 알수있을까요?

여기 읽어봤는데 말씀하신 부분이 안보이네요.

abi는 제가 배포한 컨트랙트도 아니고 등록된 컨트랙트도 아니라 드릴 수가 없네요ㅠ 제 생각에는 balanceOf 구현이 다른 일반적인 Token과 다르게 내부에서 루프를 타서 그런것이 아닐까 생각이 듭니다.

kend.conf 파일에 ADDITIONAL=“–rpc.evmtimeout 10s” 이런식으로 넣어주시면 됩니다.