Generieren Sie den privaten Schlüssel und die Adresse mit web3j

Wie kann ich einen privaten Schlüssel und eine Adresse generieren, web3janstatt eine Keystore-JSON-Datei zu erstellen?

Es ist eine gute Frage

Antworten (2)

Unten ist mein Ansatz, der durch Importieren des Ergebnis-Privatschlüssels in MetaMask verifiziert wird und dieselbe Adresse wie erwartet erhält.

private static JSONObject process(String seed){

         JSONObject processJson = new JSONObject();

         try {
            ECKeyPair ecKeyPair = Keys.createEcKeyPair();
            BigInteger privateKeyInDec = ecKeyPair.getPrivateKey();

            String sPrivatekeyInHex = privateKeyInDec.toString(16);

            WalletFile aWallet = Wallet.createLight(seed, ecKeyPair);
            String sAddress = aWallet.getAddress();


            processJson.put("address", "0x" + sAddress);
            processJson.put("privatekey", sPrivatekeyInHex);


        } catch (CipherException e) {
            //
        } catch (InvalidAlgorithmParameterException e) {
            //
        } catch (NoSuchAlgorithmException e) {
            //
        } catch (NoSuchProviderException e) {
            //
        } 

        return processJson;
}


main(){  // unit test 
    String seed = UUID.randomUUID().toString();
    JSONObject result = process(seed); // get a json containing private key and address
}
String sPrivatekeyInHex = privateKeyInDec.toString(16);Was macht diese Zeile? Könnten Sie erklären?
@Ajit Soman getPrivateKey() gibt dezimal zurück, normalerweise müssen wir einen privaten Hex-String-Schlüssel verwenden.
Ich habe eine Frage gepostet. könnten Sie mir diesbezüglich einige Informationen geben: ethereum.stackexchange.com/questions/41194/…

Folgendes habe ich getan:

public class MainActivity extends AppCompatActivity {
    private WalletFile wallet;
    private String password = "PASSWORD";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setupBouncyCastle();


        try {
            wallet = createWallet();
        } catch (Exception e) {
            System.out.println("BIG RIP");
        }
    }


    public WalletFile createWallet() throws Exception {
        ECKeyPair keyPair = Keys.createEcKeyPair();
        return Wallet.createLight(password, keyPair);

    }


    private void setupBouncyCastle() {
        final Provider provider = Security.getProvider(BouncyCastleProvider.PROVIDER_NAME);
        if (provider == null) {
            // Web3j will set up the provider lazily when it's first used.
            return;
        }
        if (provider.getClass().equals(BouncyCastleProvider.class)) {
            // BC with same package name, shouldn't happen in real life.
            return;
        }
        // Android registers its own BC provider. As it might be outdated and might not include
        // all needed ciphers, we substitute it with a known BC bundled in the app.
        // Android's BC has its package rewritten to "com.android.org.bouncycastle" and because
        // of that it's possible to have another BC implementation loaded in VM.
        Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);
        Security.insertProviderAt(new BouncyCastleProvider(), 1);
    }
}

Aus irgendeinem Grund wirft Keys.createEcKeyPair() in neueren Versionen von web3j einen Fehler, also habe ich etwas Code von hier kopiert: https://github.com/serso/web3a/blob/4dda74db948f8cbd9a79ba4b9ab456316ea52c4d/app/src/main/java /org/solovyev/android/web3a/App.java#L47 zum Einrichten einer Hüpfburg vor dem Ausführen.