분류 전체보기

    [Blockchain] Klaytn WebSocket 끊김 후 재연결 (spring boot)

    Klaytn에서 WebSocket을 연결하여 스마트컨트랙트에서 발생하는 이벤트를 구독하려고 했다. 문제는 웹소켓 연결이 시간이 지나면 계속 끊겼다. 이 문제를 정의하고 해결하려고 한다. 1. 문제 1분간 별도의 request가 없으면 끊긴다. 클레이튼 데브포럼에서 클레이튼 팀에서 직접 단 댓글이다. 하지만 나는 1분간 별도의 request가 없어도 정상적으로 연결되다가 몇 시간 후에 갑자기 끊겨 버린다. 21년 6월에 작성한 글이라 오래되서 뭔가 바꼈나 하고 다시 찾아봤다. 그랬더니 위와 같이 최근에도 같은 답변이 있었다. 주기적으로 getblocknumber를 호출하는 방법보다 더 효율적인 방법을 찾고 싶었다. 그래서 WebSocketService의 connect가 끊겼을때를 감지해서 다시 connec..

    [Blockchain] 언어별 web3 차이로 트랜잭션 해시값 차이

    1. 문제 및 해결 클라이언트(flutter)에서 트랜잭션 사인 -> 백엔드(nodejs)에서 트랜잭션 해시값 send 위 과정에서 evm에 트랜잭션을 보내는 처리가 실패했다. 처음엔 flutter에서 트랜잭션을 잘못 생성했다고 생각하여 abi등 꼼꼼하게 확인했지만 이상이 없었다. 문제는 type2 트랜잭션의 문제였다. evm 트랜잭션의 타입 (1) type1 gas price를 설정하여 네트워크가 바쁠때는 높은 gas price부터 빠르게 처리한다. 트랜잭션 예시(nodejs) const tx = { to: to, value: parsedEthAmount, gasPrice: ethers.utils.parseUnits("20", "gwei"), gasLimit: ethers.utils.parseUnits..

    [Blockchain] web3j 에서 nonce값 동시성 해결

    트랜잭션을 보낼때 논스값이 같은 경우가 생겨서 이를 해결하려고 한다. 기존 코드 EthGetTransactionCount ethGetTransactionCount = web3jHttpRpc.ethGetTransactionCount( PUBLIC_KEY, DefaultBlockParameterName.PENDING ).send(); BigInteger nonce = ethGetTransactionCount.getTransactionCount(); 블록체인과 통신하는 과정이 비동기 처리로 되다보니 논스값을 받아 트랜잭션을 보내는 부분을 for문으로 처리했다가 nonce값이 같은 트랜잭션을 보내는 경우가 생겼다. 동시성 해결 코드 (1) nonce를 받아오는 부분만 동기처리 private static BigI..

    [Spring Boot] Spring Boot WebClient

    Spring Boot WebClient 모든 소스는 github에 있습니다. WebClient vs RestTemplate 스프링에서 http 요청을 위해 WebClient 와 RestTemplate이 있다. 인터넷에 RestTemplate이 Deprecated 된다는 말이 있지만 이는 사실이 아니다. It would be more helpful, and also accurate, to explain that the RestTemplate is in maintenance mode rather than mention a potential deprecation in the future. Deprecated 관련 이슈 java doc 을 확인해보면 유지모드로 들어간다고 한다. RestTemplate 동작 원리..

    [Spring Boot] Spring Security - OAuth2 (Google login)

    Spring Security - Oauth 2.0 모든 소스는 깃허브에 있습니다. https://github.com/TeTedo/blog-code/tree/main/spring-security-oauth Google login 1. 구글 클라우드 플랫폼 주소으로 이동해서 프로젝트 만들기 2. 완성된 프로젝트 생성 후 API 및 서비스 클릭 3. OAuth 클라이언트 ID 만들기 4. OAuth는 리다이렉션 URI를 설정하여 로그인 성공시 보여줄 화면을 지정할 수 있다. 5. application-oatuh.yml 파일 생성 spring: security: oauth2: client: registration: google: client-id: ${GOOGLE_CLIENT_ID} client-secret: ..

    [BlockChain] EIP 55란?

    EIP55란 이더리움 지갑주소의 일부를 대문자화하여 구버전과 호환되는 이더리움 주소 체크섬을 제공한다. 일반 이더리움 주소 0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9 EIP-55 적용한 주소 0x001d3F1ef827552Ae1114027BD3ECF1f086bA0F9 일반 이더리움 주소와 비교해보면 대소문자 차이만 있는것으로 확인할 수 있다. EIP 적용 방법 일반 이더리움 주소에서 0x를 제외한 값을 keccak256 함수로 해시값을 얻는다. 만약 해시값이 16진수로 8보다 크다면 그 자리를 대문자로 바꿔준다. Addr : 001d3f1ef827552ae1114027bd3ecf1f086ba0f9 Hash : 23a69c1653e4ebbb619b0b2cb8a9bad498..