Accordingly to the BIP32/BIP44 specification recommendations I generating HD Wallet addresses using
bitcoinj library (
DeterministicKey instances) with the path like M/44'/60'/0'/0/0 using xpub key only (non-hardened keys can derive child public key without knowing private keys) to use them later for funds receiving operations only. But I was unable to get corresponding Ethereum address using web3j library, as I getting "Private key bytes not available" error (that is of course true).
My code sample for the address generation:
String xpub = "xpub6Df54KC7ti7yvkfDAwsL4QJ1a69GeMM1ChaNqSnGzbpFdxd4PCy1FzdPVftoBYFA4ogmvDUccUbEhGsozE1YkXtQ2YMxAXWKcM8cBxYD6cp"; DeterministicKey extKey = DeterministicKey.deserializeB58(xpub,mainnetParams); DeterministicKey addrKey = HDKeyDerivation.deriveChildKey(extKey,0); Credentials credentials = Credentials.create(addrKey.getPrivateKeyAsHex()); System.out.println(credentials.getAddress());
returned keys fully corresponds to the https://iancoleman.io/bip39/ results. The error raises on the
Also I tried another way:
System.out.println("address from pub=" + Keys.getAddress(addrKey.getPublicKeyAsHex()));
but in this case the result does not look correct accordingly to https://iancoleman.io/bip39/
Is it possible at all to generate Ethereum address without private key?
Any advice/explanation/link highly appreciated.