본문 바로가기

블록체인/솔라나

web3 개발 애러 처리

반응형
  • 솔라나 web3 개발을 하면서 소스코드상 어떻게 예외처리 로직을 짜야 좋은지 고민하게 된다.
  • web3 호출에 대한 다양한 에러가 발생할 수 있는데, 1. 입력값을 내가 직접 필터링할 수도 있고 2. web3 호출의 에러 리턴 값을 try-catch 문으로 파싱해줄 수도 있다.

내가 직접 필터링하는 방법

장점

  1. 다양한 테스트케이스에 대해 생각해볼 수 있다.
  2. 에러를 직접 처리하는 과정에서 사용하는 web3 함수들과 친해질 수 있다.
  3. 직접 작성하여 정확한 에러 메세지를 리턴해줄 수 있다.

단점

  1. 소스코드가 복잡해진다. if-else 문이 중첩될 수 있다.

web3 호출 에러를 리턴하는 방법

장점

  1. 불필요한 web3 호출을 줄여 함수 실행 속도를 개선한다.
  2. 에러 메세지를 파싱하기 위한 글로벌 핸들러를 개발할 수 있다.
    • web3 에서 리턴되는 에러는 error.message 는 항상 포함되지만, 블록체인상 발생한 에러인 error.log 배열은 항상 리턴되지 않는다.
    • 아래 코드를 사용하면 블록체인 에러가 있는 경우에는 좀 더 상세한 메세지를 검색하여 리턴하고, 그렇지 않은 경우에는 error.message 를 리턴한다.
    • catch (error) {
      
      successOrNot = 'N';
      
      if (error.logs == null) {
       statusCode = error.message;
      } else {
       const match = error.logs.find(element => {
         if (element.includes('Error')) {
           return true;
         }
       });
       statusCode = match;
      }
      }

단점

  1. 코드만 봐서는 테스트케이스에 대해 알 수 없다.

결론

  • API 사용자에 대한 요구에 맞춰야 한다.
    • 프론트페이지에서 에러 메세지를 활용해야하는 경우에는 수요에 맞는 리턴 값을 만들어줘야 한다.
  • 너무 상세한 피드백은 해킹 취약점이 될 수 있다. 
  • 정상적으로 처리되어야하는 입력값에 대한 에러는 직접 잡는다.
    • 예를들면 token 을 전송할 때, 전달받는 주소에 이미 token account 가 생성되어있을 수 있다.
    • 그럴 떄 token account 생성 명령어를 추가하면 에러가 발생한다.
  • 트랜잭션 오버헤드를 최소화하기 위해 web3 리턴된 에러에 대해 메세지만 수동으로 바꾸어준다.
반응형