Cómo crear una cuenta en ethereumj

¿Cómo crear una cuenta externa (personal.newAccount()) equivalente en ethereumj? Sé que podría usar la API jsonrpc para hacerlo. Pero leí https://github.com/ethereum/ethereumj/issues/335 , que dice que podría crear una cuenta, pero no pudo, solo genera la dirección, pero no la incluye/agrega al almacén de claves. ¿Cómo puedo agregar esto al almacén de claves?

Respuestas (1)

En primer lugar, necesitará la siguiente dependencia de Maven pom.xml:

    <dependency>
        <groupId>org.ethereum</groupId>
        <artifactId>ethereumj-core</artifactId>
        <version>1.2.0-RELEASE</version>
        <!--  <type>zip</type>  -->
    </dependency>

Y aquí está el código para crear un par de cuenta/clave privada:

import org.ethereum.crypto.ECKey;
import org.spongycastle.util.encoders.Hex;

public class CreateAccount {

    public static void main(String[] args) {
        ECKey key = new ECKey();

        byte[] addr = key.getAddress();
        byte[] priv = key.getPrivKeyBytes();

        String addrBase16 = Hex.toHexString(addr);
        String privBase16 = Hex.toHexString(priv);

        System.out.println("Address     : " + addrBase16);
        System.out.println("Private Key : " + privBase16);
    }
}

Ejecutar el código dos veces produce el siguiente resultado:

Address     : 82d4b1c01afaf7f25bb21fd0b4b4c4a7eb7120ce
Private Key : 133965f412d1362645cbd963619023585abc8765c7372ed238374acb884b2b3a

Address     : 68ccabefc7f4ae21ce0df1d98e50e099d7fc290f
Private Key : 1caeb7f26cb9f3cc7d9d0dbcdd3cf3cb056dbc011ec9013e8f3b8cdb2f193b32

Verificando la información con https://www.myetherwallet.com/#view-wallet-info :ingrese la descripción de la imagen aquí


ingrese la descripción de la imagen aquí

Y tenga en cuenta que las cuentas creadas en EthereumJ están todas en minúsculas, mientras que las cuentas generadas a partir de las claves privadas usando MyEtherWallet están en mayúsculas y minúsculas. Esto se debe a que MyEtherWallet está utilizando las nuevas cuentas con suma de verificación. Vea Otra codificación de dirección de suma de comprobación genial # 55 .

No estoy usando Wallet. Y estoy corriendo en una red privada. Mi intención era permitir que los usuarios accedieran al código java para crear sus cuentas externas en la red privada.
No necesita MyEtherWallet. Incluí las imágenes solo para confirmar que los pares de clave privada/cuenta son válidos.
Entendido, pensé que MyWallet haría la creación real de la cuenta. Puede ser que no fui lo suficientemente claro. Digamos que creamos la cuenta usando el código java (supongamos, accountFactory.createAccount(key)). Y luego podemos ver esta cuenta desde la consola geth. Por ejemplo, eth.accounts, mostraría la dirección de la última cuenta creada.
Si está preguntando cómo se pueden importar las cuentas generadas por Java geth, tendrá que usar el comando geth account import private-key-file-to-delete-when-completeddonde el contenido del archivo es su clave privada generada. Una vez importadas a geth, sus cuentas estarán disponibles en eth.accounts. EthereumJ no interactúa con su gethalmacén de claves a través del código Java. Puede usar la personal.newAccount()API como se indica en github.com/ethereum/go-ethereum/wiki/… pero tendrá que usar su propio código para acceder a la API de IPC o RPC.
@The Neo Noir Developer Solo una nota: cuando crea una nueva cuenta usando herramientas con las que no está familiarizado, desea verificar usando un cliente/idioma diferente la clave privada -> derivación de dirección para asegurarse de que todo esté bien. En este ejemplo, creas con Java y verificas con Javascript. También puede verificar con python, go, rust o cualquiera de los otros clientes/idiomas disponibles. Es asegurarse de que la clave privada desbloquee la dirección que guardó. De lo contrario, puede enviar a una dirección a la que en realidad no tiene acceso.
Y aquí hay un enlace para importar una clave privada simple a geth: ethereum.stackexchange.com/questions/465/…