안녕하세요,
caver-java 1.5.0을 이용해서 개발하려고 하는 중,
smartcontract의 java wrapper를 생성하기 위해서 caver-java의 codegen 기능을 이용하려고 했더니…
homebrew를 통해 설치한 caver-java (버전 확인해보니 아직 1.3.1)을 이용해서 생성했더니
아직 1.5.0의 api가 반영되지 않아서,
직접 caver-java 레포지토리에서 체크아웃한 master 브랜치를 빌드해서
($ ./gradlew :console:shadowDistZip) 생성한 caver-java 실행파일을 이용해도
여전히 1.5.0의 api가 아닌 1.4.x의 api를 사용하는 wrapper 가 생성되고 있는데요…
wrapper 생성 말고도,
가이드에 쓰여 있는대로 Klaytn노드 연결을 위한 Caver 생성을 아래와 같이 하면 Caver caver = new Caver(Caver.BAOBAB_URL);
해당 caver로 생성한 TransactionManager를 통해서 TransactionManager.executeTransaction(TransactionTransformer transactionTransformer)
와 같은 트랜잭션 수행을 위한 메소드 수행 시,
1.5.x에서는 deprecated 된 caver.klay() 등을 통해서 JSON-RPC API 호출이 일어나는데
위의 new를 통한 Caver 생성을 하게 되면 klay가 null이기 때문에 NullPointerException이 발생하게되버리네요;
1.5.x의 api를 지원하는 codegen 업데이트 일정
아직은 1.5.x api를 지원하는 codegen 업데이트의 일정이 잡힌 것이 없습니다.
하지만, 1.5.x버전으로 업데이트 되면서 Contract를 배포 / 실행하는 방법이 기존의 codegen을 통해 contract wrapper class를 생성하는 방법만큼 편하게 인터페이스가 바뀌었습니다.
1.5.x에서 Contract를 실행 / 배포하는 방법이 궁금하시다면 1.5.x에서 사용되는 Getting started의 문서를 참고 부탁드립니다.
Caver instance의 NullPointer Exception 발생관련
caver-java는 1.5.x로 버전이 업데이트되면서 KIP 34: Klaytn SDK Common Architecture가 적용되었고 이전버전(1.4버전)과 비교해봤을 때 사용성 및 인터페이스가 달라졌습니다.
위와 같은 이유로 발생한 인터페이스의 변경으로 인해 1.5.x대 버전으로 업데이트를 해도, 기존에 하위 버전을 사용하던 사용자분들을 위해 코드를 그대로 남겨두긴 했습니다만, 1.5.x에서 지원하는 클래스 및 method를 1.5버전 이하에서 사용되던 method와 혼용해서 사용하면 안됩니다.
1.5버전 이하에서는 Caver 클래스의 instance를 만들때 아래와 같이 만듭니다. Caver caver = Caver.build(Caver.BAOBAB_URL);