Как я могу позволить TestRpc раскрыть открытый ключ сгенерированной учетной записи

Я страдаю крутой кривой обучения в начале. Моя текущая цель — настроить тестовую среду с помощью TestRpc, Truffle и Web3j (вау).

Web3j работал, как и ожидалось, и создал Java-оболочку для знаменитого контракта HelloWorld. TestRpc также работает, как и ожидалось, и показывает, как на изображении.

https://goo.gl/images/V96znv Изображение: я взял это из Интернета, но это то же самое

На изображении показаны адреса и закрытые ключи. Если вы используете TestRpc, я предполагаю, что вы видели его много раз.

Итак, вернемся к моему простому вопросу. Где или как получить открытый ключ для учетных записей, отображаемых в консоли TestRpc?

Ответы (3)

Testrpc дает вам закрытый ключ для каждой учетной записи. Чтобы получить соответствующий открытый ключ, вам просто нужно умножить базовую точку вашей кривой на закрытый ключ. Это можно сделать, например, с помощью bouncycastle.

Базовой точкой для secp256k1 является G=(gx,gy) с:

gx = 55066263022277343669578718895168534326250603453777594175500187360389116729240 gy = 32670510020758816978083085130507043184471273380659243275938904335757337482424

на самом деле довольно просто:

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);

Я не получил ответа. Но я нашел обходной путь, который может помочь другим.

Пример кода в проекте Web3j может помочь, если у вас есть тот же вопрос. Проверьте наличие пакета org.web3j.crypto. Похоже, он использует org.bouncycastle для создания полного набора ключей.

    /**
 * 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();
}