¿Cómo puedo dejar que TestRpc revele la clave pública de una cuenta generada?

Sufro una curva de aprendizaje empinada al principio. Mi objetivo actual es configurar un entorno de prueba con TestRpc, Truffle y Web3j (wow).

Web3j funcionó como se esperaba y generó un envoltorio de Java para el famoso contrato HelloWorld. TestRpc también funciona como se esperaba y se muestra como en la imagen.

https://goo.gl/images/V96znv Imagen: Esto lo saqué de la web, pero es lo mismo

La imagen muestra las direcciones y las claves privadas. Si usa TestRpc, supongo que lo ha visto muchas veces.

Así que volviendo a mi simple pregunta. ¿Dónde o cómo obtengo la clave pública para las cuentas que se muestran en la consola de TestRpc?

Respuestas (3)

Testrpc te da la clave privada de cada cuenta. Para recibir la clave pública correspondiente simplemente tienes que multiplicar el punto base de tu curva por la clave privada. Esto se puede hacer usando, por ejemplo, un castillo hinchable.

El punto base para secp256k1 es G=(gx,gy) con:

gx = 55066263022277343669578718895168534326250603453777594175500187360389116729240 gy = 32670510020758816978083085130507043184471273380659243275938904335757337482424

bastante fácil de hecho:

import org.web3j.crypto.ECKeyPair;   
import org.web3j.utils.Numeric;

final ECKeyPair keyPair = ECKeyPair.create(Numeric.toBigInt("0x"));
BigInteger publicKey = keyPair.getPublicKey();

//later to be use in Web3j you may need
 Credentials credentials = Credentials.create(keyPair);

No obtuve una respuesta. Pero encontré una solución que puede ayudar a otros.

Un ejemplo de código en el proyecto Web3j puede ser de ayuda si tiene la misma pregunta. Busque el paquete org.web3j.crypto. Parece usar org.bouncycastle para generar un conjunto de claves completo.

    /**
 * Create a keypair using SECP-256k1 curve.
 *
 * <p>Private keypairs are encoded using PKCS8
 *
 * <p>Private keys are encoded using X.509
 */
static KeyPair createSecp256k1KeyPair() throws NoSuchProviderException,
        NoSuchAlgorithmException, InvalidAlgorithmParameterException {

    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("ECDSA", "BC");
    ECGenParameterSpec ecGenParameterSpec = new ECGenParameterSpec("secp256k1");
    keyPairGenerator.initialize(ecGenParameterSpec, new SecureRandom());
    return keyPairGenerator.generateKeyPair();
}