Transfer 함수 호출 시 "nvalid response received: 403" 오류가 발생하였습니다

안녕하세요.

Caver를 이용해서 서비스를 이용 중인 개발자입니다.

기존에 EN노드를 운영하면서 운영비용이 증가하여 KAS 유료요금제로 가입하고 Caver 객체를 생성할 때 new Caver(new HttpService(""https://node-api.klaytnapi.com/v1/klaytn));와 같이 객체를 생성해서 transfer함수를 호출하였습니다.

지난주 금요일부터 변경을 하였고 변경한 이후로 "Invalid response received: 403"오류가 자주 발생하고 있어
문의드리자 합니다.

서버에는 아래와 같이 남아있었고

22-02-06 22:00:05:468 DEBUG HikariPool-1 housekeeper c.z.h.p.HikariPool:414 - HikariPool-1 - Pool stats (total=4, active=0, idle=4, waiting=0)
22-02-06 22:00:05:468 DEBUG HikariPool-1 housekeeper c.z.h.p.HikariPool:521 - HikariPool-1 - Fill pool skipped, pool has sufficient level or currently being filled (queueDepth=0.
22-02-06 22:00:05:750  WARN pool-5-thread-4 i.m.t.s.TokenService:717 - Exception:{}
org.web3j.protocol.exceptions.ClientConnectionException: Invalid response received: 403;
        at org.web3j.protocol.http.HttpService.performIO(HttpService.java:173)
        at org.web3j.protocol.Service.send(Service.java:48)
        at org.web3j.protocol.core.Request.send(Request.java:87)
        at io.token.klaytn.RoleBasedKeyUtils.getAccountType(RoleBasedKeyUtils.java:480)
        at io.token.klaytn.RoleBasedKeyUtils.getPrivateKering(RoleBasedKeyUtils.java:110)
        at io.token.klaytn.RoleBasedKeyUtils.transfer(RoleBasedKeyUtils.java:318)
        at io.token.service.TokenApiService$SyncKCTTask.process(TokenApiService.java:436)
        at io.token.disruptor.MessageProcessor.onEvent(MessageProcessor.java:38)
        at io.token.disruptor.MessageProcessor.onEvent(MessageProcessor.java:10)
        at com.lmax.disruptor.WorkProcessor.run(WorkProcessor.java:143)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)

AWS에서 EN노드를 구성하고 transfer함수를 호출 했을 때는 자주 발생하지 않았습니다.

@ToTheMoon

사용하신 소스코드 공유를 부탁드립니다.
질문자 분의 에러 메시지만으로는 트랙킹 하기 어렵습니다.

The posting guideline of Caver - #2 도 참고 부탁드립니다.
이 양식에 맞춰 상세하게 질문을 작성해주시면 답변자가 원활하게 답변할 수 있을 거 같습니다.

@Denver

  • 제품 명 : caver-java
  • 제품 버전 : 1.6.3
  • OS환경 : Linux
  • 내용(문의 유형에 해당하는 항목 작성) :
    답변을 기다리면서 로그를 조금 더 확인해봤는데 해당 오류는 "caver.rpc.klay.getAccountKey(targetAddress).send();"로 지갑의 타입을 확인하는 함수를 호출했던 부분에서 오류가 발생하였습니다.
    테스트한 지갑주소는 "0xe82ed0bb7c9318c6ae0b8b3988ad5182cd64a28d"이었고 해당 오류는 try~catch로 처리하도록 조치하였습니다.

여기서 문의드릴 사항은 Caver(new HttpService(""https://node-api.klaytnapi.com/v1/klaytn));으로 Caver객체를 생성했을 때 해당 메소드는 지원하지 않는지 문의드립니다.

@ToTheMoon

아래의 소스코드로 확인해보았을 때 에러 없이 잘 동작하는 것 확인했습니다.

제가 드린 것처럼, 사용하신 소스코드를 공유해주셔야 정확한 원인 진단이 가능합니다.
혹시 제가 드린 소스코드의 60-61 라인과 같이 Authorization 헤더 처리를 안해주신 건 아닌지요?

@Denver

설정해주었다고 생각했는데
다른 쓰레드에서 설정이 안된상태로 호출이 된거 같습니다
그 부분을 확인해서 수정해야할 것 같네요

감사합니다.

1개의 좋아요

@Denver

헤더부분을 확인하다가 문의점이 생겨서 질문드립니다.

HttpService httpService = new HttpService("https://node-api.klaytnapi.com/v1/klaytn");
            httpService.addHeader("Authorization", Credentials.basic(accessKey, secretAccessKey));
            httpService.addHeader("x-chain-id", "1001");
            Caver _caver = new Caver(httpService);

위와같이 설정을하였습니다.

하나의 쓰레드에서 재사용하도록 서비스를 구현했습니다.
재사용이 안되는건지 확인해보려고 caver의 Authorization 헤더부분의 설정정보를 log로 확인해보고 싶은데
해당 정보는 어떻게 확인을 할 수 있는지 문의드립니다.

@ToTheMoon

아래와 같이 확인해보시면 될 거 같습니다.

        // In the caver, almost everything starts with the caver. Let's create a caver instance
        HttpService httpService = new HttpService(nodeApiUrl);
        httpService.addHeader("Authorization", Credentials.basic(accessKeyId, secretAccessKey));
        httpService.addHeader("x-chain-id", chainId);
        Caver caver = new Caver(httpService);
        HashMap<String, String> headers = ((HttpService)caver.currentProvider).getHeaders();
        System.out.println(headers);

@Denver

감사합니다
확인해보고 피드백드리겠습니다

안녕하세요.

KAS의 Node API를 활용하시는 것으로 보이는데, 이 문제는 403 Error 발생 시 Error message를 try-catch로 잡아서 확인하신 뒤에 KAS로 문의하시는게 맞는 것 같습니다.

caver는 provider를 통해 EN에 API를 요청, 응답값을 받는 역할을 하는 것이지, 이 요청에 대한 백엔드 로직을 담당하지는 않습니다.

먼저, 진행하시는 프로젝트 코드에 문제가 없는지 살펴보시고, 문제가 없다면 403 error 메세지를 상세히 확인하신 뒤 KAS 제품 문의를 부탁드리겠습니다.

cc @_Mike

감사합니다.

1개의 좋아요