¿Cómo importar una clave privada simple en geth o Mist?

Esta es una pregunta tan básica, pero no puedo entender cómo importar una clave privada simple y sin cifrar en geth o mist.

Lo intenté geth account import 7[......]bla, pero parece que este comando siempre está buscando un archivo de claves sin cifrar.

¿Algunas ideas?

Respuestas (7)

Pegue la clave en un archivo de texto, guárdelo en el disco y use la ruta a ese archivo con geth account import. Aquí hay algunos ejemplos de instrucciones de Windows que pueden ayudar:

  1. Abrir Bloc de notas
  2. Pegue la clave en el bloc de notas sin caracteres ni comillas adicionales
  3. Guarde el archivo como nothing_special_delete_me.txtenC:\
  4. Ejecute el comando,geth account import C:\nothing_special_delete_me.txt
  5. Después de una importación exitosa, elimine el archivo enC:\nothing_special_delete_me.txt

Si aún no tiene instalado geth, realice los siguientes pasos después del paso 3 y continúe con el paso 4:

  • Abra el símbolo del sistema (cmd.exe).
  • Dentro del símbolo del sistema, escriba el siguiente comando para ir a la carpeta que contiene su archivo Geth.exe: cd c:\Ethereum-Wallet-win64-0-7-3\resources\node\geth(inserte su ruta correcta allí)
Estoy recibiendo Fatal: keyfile must be given as argumentmientras hago lo mismo. PD: Estoy corriendo en linux macine.

Use el siguiente comando en la consola geth

web3.personal.importRawKey("<Private Key>","<New Password>")
Por defecto, web3.js no incluye los personalmétodos. Consulte ethereum.stackexchange.com/questions/1413/… para obtener más información .

Mist no tiene forma de importar a través de GUI, por lo que debe importar usando la línea de comando ( geth). Aparecerá en tu Niebla inmediatamente.

Para Mac:

  1. Texto abiertoEditar

  2. Pegue la clave en TextEdit sin caracteres ni comillas adicionales

  3. Guarde el archivo como nothing_special_delete_me.txten su escritorio

  4. Abra la Terminal, ejecute el comando:

    geth account import ~/Desktop/nothing_special_delete_me.txt
    
  5. Después de una importación exitosa, elimine el archivo de su escritorio.

"Pegar la clave en un archivo de texto"... ¿cómo puedo ver mi clave privada antes de copiarla/pegarla en algún lugar? ¿En la Niebla no hay opción para tomar esa información?
@metafl: si tiene la cuenta en mist, no necesita importarla a geth. Ya está allí. esto explica dónde están sus claves de niebla, pero no son claves privadas sin procesar, son archivos de almacén de claves encriptados. ethereum.stackexchange.com/questions/946/…
bashUsuarios : una respuesta de un solo paso está aquí .
@TomHale La razón por la que se recomienda usar un archivo externo es que hacerlo de esta manera almacenaría su clave privada en su .bash_history, lo cual es inesperado para la mayoría y potencialmente malo

Para Linux:

cuando descargue la billetera de niebla, obtendrá una carpeta. Dentro de la carpeta es donde está la billetera de niebla. Después de ejecutar la billetera de niebla, debe ingresar a cli.

Ir a /whereveryousavedtheetherumfolder/node/resource/geth/continuación, ejecutar ./geth account import privekey-file.txt.

Esto no funciona en mi caso, obtengo Fatal: keyfile must be given as argument> Todavía no puedo resolverlo.

Teniendo en cuenta la popularidad de esta pregunta, seguí adelante y construí una herramienta de tal manera que si tiene su clave privada sin procesar, puede convertirla fácilmente en su contraparte de clave pública y la dirección Ethereum derivada.

Luego puede exportar la clave en el formato apropiado como se define aquí , de modo que se pueda utilizar con Geth o Parity.

Ingrese su clave privada ingrese la descripción de la imagen aquí

Exporte su archivo de claves ingrese la descripción de la imagen aquí

Dicho esto, creo que vale la pena señalar que, de todos modos, no debería trabajar directamente con su clave privada. Su clave privada controla el acceso a su cuenta.

NOTA: Al usar herramientas como esta, enviar su clave privada a cualquier tercero les da acceso total a los contenidos de su billetera.
Eso no es estrictamente cierto. Si guardamos su clave privada, tendríamos acceso a su cuenta. NO guardamos su clave privada. Sin embargo, el punto sigue en pie: siempre debe ser cauteloso y cuidadoso con su clave privada.

Solo use este método para cuentas de prueba desechables, ya que su clave se almacenará en el historial de su shell (gracias a @tayvano).

Usando bash, ¿dónde abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcaestá su clave privada?

geth account import <(echo abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabca)
La razón por la que se recomienda usar un archivo externo es que hacerlo de esta manera almacenaría su clave privada en su .bash_history, lo cual es inesperado para la mayoría y potencialmente malo.

Con Geth, puede importar direcciones predefinidas (pares de claves) usando la --preloadopción de geth consolecomando.

Para un entorno que no sea de producción , podría ser conveniente agregar/importar direcciones predefinidas, asignar suficientes saldos iniciales y desbloquear automáticamente esas cuentas. Puede usar allocla propiedad del objeto génesis, --preloadopción con la API de la consola geth para este propósito.

Por ejemplo, si tiene las siguientes direcciones predefinidas generadas anteriormente (puede usar generadores en línea o bibliotecas como eth-accounten Python.

private-key, address
ba75c5fd16ae1151dc9f961e94e219994c6335a5b4148c624142243fb76306d6, 0xd3ae0500e21008c89ca4746be7522340c67f5730
097dd6aedb87b3b5e541cfb9ef8d4beb7a66084dd80d99c2e51aeabeae320980, 0x76aaacd6169017644ba7530b7d956e1fcc0178ad
abae82647f5881a398f7eede8910803d65470a7cbaee9ddda90dcdcdc8dcdacf, 0xeb875bb0eec43d779c4d539ca34e89fb0868d867
cc1af47cbc9de0c9a1e1049c1a62ddb9e08440d16093803d74e93f1cea3458ee, 0x0ccca39f9c169996c8380bf7c529dc3b9ff6198a
3e48c4e748b8f5baf6f870c5c4d2a0147390c94e778a9ca67de945bffeb2f72a, 0xd738b71007cffbec9b0a7e99088b132858f5e270

A continuación se muestra el script para importar las cuentas anteriores (claves/direcciones), para desbloquearlas y para iniciar un minero con la primera cuenta.


var passphrase = 'none';
var accts = personal.listAccounts;
if (accts.length == 0){

  var keys = [
    "ba75c5fd16ae1151dc9f961e94e219994c6335a5b4148c624142243fb76306d6",
    "097dd6aedb87b3b5e541cfb9ef8d4beb7a66084dd80d99c2e51aeabeae320980",
    "abae82647f5881a398f7eede8910803d65470a7cbaee9ddda90dcdcdc8dcdacf",
    "cc1af47cbc9de0c9a1e1049c1a62ddb9e08440d16093803d74e93f1cea3458ee",
    "3e48c4e748b8f5baf6f870c5c4d2a0147390c94e778a9ca67de945bffeb2f72a"
  ]

  for(var i = 0; i < keys.length; i++){ 
    personal.importRawKey(keys[i], passphrase);
  }
  
  console.log('Successfully imported ', keys.length, ' keys into the keystore');
  accts = personal.listAccounts;
}

for(var i = 0; i < accts.length; i++){
  personal.unlockAccount(accts[i], passphrase);
}
console.log('Successfully unlocked ', accts.length, ' accounts');

miner.setEtherbase(accts[0])
miner.start(1)
console.log('Miner started for ', accts[0]);

En el script anterior, personal.listAccounts, personal.importRawKey(), personal.unlockAccount(), miner.setEtherbase()y miner.startson las API de la consola de geth.

personal.importRawKey()La API importa la clave y la dirección especificadas de forma persistente, por lo que es suficiente para llamarla una vez. Pero, personal.unlockAccount()no es persistente pero es válido hasta la instancia actual de geth. Por lo tanto, el desbloqueo es necesario cada vez que se inicia un geth.

Para ejecutar el script anterior ( geth-setup.js) cada vez que se ejecuta geth, --preloadse puede usar la opción.

$ geth --datadir ./data --nodiscover --verbosity 2 --allow-insecure-unlock \
     --preload ./scripts/geth-setup.js \
     --http --http.addr localhost --http.port 8545 console >> geth.log 2>&1

No te pierdas --allow-insecure-unlockla opción, para evitar el error de permiso de personal.unlockAccount().

Las cuentas se pueden importar y desbloquear como se indica arriba, pero aún no tienen saldo. Para asignar suficiente éter a esas cuentas, podemos usar allocla propiedad de configuración de génesis ( genesis.json). Con el ejemplo actual, genesis.jsonsería como el siguiente.

{
  "config": {
    "chainId": 2021,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,    
    "muirglacierblock": 0,
    "ethash": {
      "fixeddifficulty": 100
    }
  },
  "nonce": "0x0",
  "difficulty": "0x60",
  "gasLimit": "0x1fffffffffffff",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": {
    "d3ae0500e21008c89ca4746be7522340c67f5730": { "balance": "10000000000000000000000" },
    "76aaacd6169017644ba7530b7d956e1fcc0178ad": { "balance": "10000000000000000000000" },
    "eb875bb0eec43d779c4d539ca34e89fb0868d867": { "balance": "10000000000000000000000" },
    "0ccca39f9c169996c8380bf7c529dc3b9ff6198a": { "balance": "10000000000000000000000" },
    "d738b71007cffbec9b0a7e99088b132858f5e270": { "balance": "10000000000000000000000" }
  }
}

Este bloque de génesis se utiliza antes de la importación de cuentas. Pero la allocconfiguración (que es para las cuentas que aún no se han importado o creado cuando se crea el bloque de génesis) entrará en vigor más adelante cuando se importen las cuentas.