안녕하세요? 먼저 빠르고 상세한 답변에 정말 감사드립니다.
매니저님께서 보내주신 답안 code와 제 코드를 비교해 본 결과 keyring 추출을
KeyringFactory.decrypt 로 하느냐 KeyringFactory.createFromPrivateKey 로 하느냐의 차이로 보여서
제가 테스트 하고 있는 계정의 keystore에서 private key를 추출하여 KeyringFactory.createFromPrivateKey 로 호출해보았더니 정상적으로 동작합니다.
그러나 github에 있는 예제 코드
…
//Decrypt keystore.
ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper();
KeyStore keyStore = objectMapper.readValue(file, KeyStore.class);
AbstractKeyring keyring = KeyringFactory.decrypt(keyStore, “password”);
…
로 돌려보면 여전히 동작하지 않습니다.
KeyringFactory.decrypt의 반환값은 AbstractKeyring,
KeyringFactory.createFromPrivateKey SingleKeyring 로 서로 달라서
KeyringFactory.decrypt 함수 내부를 확인해보니 일반적인 account의 경우, KeyringFactory.createWithSingleKey을 호출하여 SingleKeyring type을 반환하는 것 같아
아래와 같이 SingleKeyring으로 강제 형변환을 하여 실행해 보았지만 역시 실패하였습니다.
SingleKeyring keyring = (SingleKeyring)KeyringFactory.decrypt(keyStore, “password”);
이번에는 위 두가지 case를 통해 얻어지는 keyring 의 내용을 출력해보았습니다.
ObjectMapper objectMapper = ObjectMapperFactory. getObjectMapper ();
KeyStore keyStore = objectMapper.readValue(file, KeyStore.class);
SingleKeyring keyring = (SingleKeyring)KeyringFactory. decrypt (keyStore, “password”);
System. out .println("keyring.toString() = " + keyring.toString());
System. out .println("keyring.getAddress() = " + keyring.getAddress());
System. out .println("pubkey = " + keyring.getPublicKey());
System. out .println("privkey = " + keyring.getKey().getPrivateKey());
address 출력 부분에 0x가 있고 없고의 차이가 있었지만, private key 내용은 동일하게 나왔습니다.
그래서 위 코드를 통해 얻어진 private key로 다시 SingleKeyring을 생성하도록 아래와 같이 코딩하였습니다.
SingleKeyring keyring2 = KeyringFactory. createFromPrivateKey (keyring.getKey().getPrivateKey());
상기 코드로 인해 생성된 keyring2로 valueTransfer를 수행한 결과 정상적으로 처리됨을 확인하였습니다.
그러나 여전히
//Decrypt keystore.
ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper();
KeyStore keyStore = objectMapper.readValue(file, KeyStore.class);
AbstractKeyring keyring = KeyringFactory.decrypt(keyStore, “password”);
코드가 왜 정상동작 하지 않는지에 대한 의문은 해결되지 않았습니다.
혹시 도움을 받을 수 있으면 정말 감사드리겠습니다.