반응형
- 솔라나 web3 개발을 하면서 소스코드상 어떻게 예외처리 로직을 짜야 좋은지 고민하게 된다.
- web3 호출에 대한 다양한 에러가 발생할 수 있는데, 1. 입력값을 내가 직접 필터링할 수도 있고 2. web3 호출의 에러 리턴 값을 try-catch 문으로 파싱해줄 수도 있다.
내가 직접 필터링하는 방법
장점
- 다양한 테스트케이스에 대해 생각해볼 수 있다.
- 에러를 직접 처리하는 과정에서 사용하는 web3 함수들과 친해질 수 있다.
- 직접 작성하여 정확한 에러 메세지를 리턴해줄 수 있다.
단점
- 소스코드가 복잡해진다. if-else 문이 중첩될 수 있다.
web3 호출 에러를 리턴하는 방법
장점
- 불필요한 web3 호출을 줄여 함수 실행 속도를 개선한다.
- 에러 메세지를 파싱하기 위한 글로벌 핸들러를 개발할 수 있다.
- 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; } }
- web3 에서 리턴되는 에러는
단점
- 코드만 봐서는 테스트케이스에 대해 알 수 없다.
결론
- API 사용자에 대한 요구에 맞춰야 한다.
- 프론트페이지에서 에러 메세지를 활용해야하는 경우에는 수요에 맞는 리턴 값을 만들어줘야 한다.
- 너무 상세한 피드백은 해킹 취약점이 될 수 있다.
- 정상적으로 처리되어야하는 입력값에 대한 에러는 직접 잡는다.
- 예를들면 token 을 전송할 때, 전달받는 주소에 이미 token account 가 생성되어있을 수 있다.
- 그럴 떄 token account 생성 명령어를 추가하면 에러가 발생한다.
- 트랜잭션 오버헤드를 최소화하기 위해 web3 리턴된 에러에 대해 메세지만 수동으로 바꾸어준다.
반응형
'블록체인 > 솔라나' 카테고리의 다른 글
팬텀 지갑의 get cluster (0) | 2022.06.29 |
---|---|
팬텀 지갑 제공 정보 (0) | 2022.06.14 |
서명 검증 함수 소개 (0) | 2022.05.23 |
[beet FixableBeetStruct.deserialize 에러]"offset" is out of range (0) | 2022.05.18 |
sendAndConfirmTransaction 서명 오류 (0) | 2022.05.16 |