기존 Caver-java 에서 Caver() 를 CaverExtKas() 로 변경시 오류

안녕하세요.

기존 코드(cavar-java 1.5.0)에서 동작하던 코드에서 Caver 객체 획득 부분을 CaverExtKas() 로 변경 했을 시 오류가 발생하여 문의드립니다.

       // 동작했던 버전

// String networkUrl = “https://api.baobab.klaytn.net:8651”;
// int chainId = 1001;
//
// Caver caver = Caver.build(networkUrl);

    // 동작하지 않는 버전 --> CaverExtKas() 로 변경해도 동일한 오류 
    String accessKeyId = "KASK3683W0SGZAPOUF407AU3";
    String secretAccessKey = "시크릿";
    int chainId = 1001;

    HttpService httpService = new HttpService("https://node-api.klaytnapi.com/v1/klaytn");

    String auth = Credentials.basic(accessKeyId, secretAccessKey, StandardCharsets.UTF_8);
    httpService.addHeader("Authorization", auth);
    httpService.addHeader("x-chain-id", chainId+"");

    Caver caver = new Caver(httpService);

    ECKeyPair operator1Key = ECKeyPair.create(Numeric.toBigInt("오퍼레이터1의 프라이빗키"));
    KlayCredentials operator1Credential = KlayCredentials.create(operator1Key, fromAddress);

    TransactionManager transactionManagerForOperator1 = new TransactionManager.Builder(caver, operator1Credential).setChaindId(chainId).build();
    KlayRawTransaction rawTransactionForOperator1 = transactionManagerForOperator1.sign(initialRequestTransaction);

java.lang.NullPointerException
at com.klaytn.caver.tx.manager.GetNonceProcessor.getNonce(GetNonceProcessor.java:39)
at com.klaytn.caver.tx.manager.TransactionManager.sign(TransactionManager.java:176)

오류가 나옵니다.

질문드립니다.

안녕하세요.

caver-java가 v1.5.0으로 업데이트되면서 1.5.0이전 버전의 코드를 호환성을 위해 코드를 남겨두었으나,
이전 버전과 1.5.0이후부터 제공하는 인터페이스를 혼용해서 사용하면 동작을 보장하지 않습니다.

또한 KASWallet class를 사용하기위해서는 caver-java v1.5.0이상에서 지원하는 메서드와 클래스를 사용하셔야합니다.

caver-java v1.5.0 이전 인터페이스로 Node API를 사용하고 싶으시다면 아래와 같이 사용해주시면 됩니다.

    int chainId = 1001;
    String auth = Credentials.basic(accessKey, secretAccessKey);

    HttpService httpService = new HttpService("https://node-api.klaytnapi.com/v1/klaytn");
    httpService.addHeader("Authorization", auth);
    httpService.addHeader("x-chain-id", "1001");

    Caver caver = Caver.build(httpService);
    caver.klay().getBlockNumber().send();

감사합니다.

Caver 를 가져오는 부분은 말씀해주신데로 했습니다만.
위 코드에서 sign() 부분에서 오류가 나는거라서요.
그 부분에 대한 코드도 수정해야하나요?

문의하신 이슈는 TransactionManager의 sign()을 호출했을때 내부적으로 account의 nonce값을 가지고 오기위해 Caver instance의 Klay객체를 가져와서 getTransactionCount()라는 함수를 호출하게 되는데요.

이때 1.4.0에서 사용되는 TransactionMangager의 내부에서 Klay객체를 가져오는 방식과 1.5.0에서 Klay 객체를 가져오는 경로 및 방식이 다르기 때문에 에러가 발생한 것입니다.

그렇기 때문에, 1.5.0이전 인터페이스와 1.5.0이후 인터페이스를 구분해서 사용해주시면 감사하겠습니다.