Dirección de billetera desconocida en cadena de desarrollo privada

Disculpas de antemano por la larga publicación. Soy nuevo en Ethereum y no sé qué detalles son significativos y cuáles no.

Estoy tratando de aprender sobre dapps siguiendo un ejemplo en este libro . Mi sistema está basado en Windows 10. El libro me dice que primero sincronice un nodo Ethereum, lo cual hago usando

geth --datadir d:\Ethereum\geth

Este no es mi %APPDATAdirectorio (esa unidad es demasiado pequeña para alojar el nodo).

Así que eso fue un éxito. El siguiente paso es crear y configurar una cadena de desarrollo privada, lo cual hago usando esto:

geth --dev --datadir D:\SampleDapp\privatenet --ipcpath D:\Ethereum\geth.ipc --networkid 45 --rpc --rpcapi web3,net,eth,personal --rpccorsdomain "*" --mine console

El libro me dice que para que Mist interactúe con el archivo IPC, debe estar ubicado con el nodo principal, por lo tanto, lo configuré de esa manera.

Hasta ahora, todo bien. A continuación, creo un contrato simple en Solidity, que se compila con éxito. Ahora llegamos a la implementación, que según el libro se realiza con este script de Node.js:

var Web3 = require('web3');
var fs = require('fs');
var exec = require('child_process').execSync;

var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));
var walletAddress = web3.eth.accounts[0];
console.log(walletAddress);
web3.personal.unlockAccount(walletAddress, process.argv[2]);

var abi = fs.readFileSync('bin/peerbet.sol:Bet.abi');
var PeerBet = web3.eth.Contract(abi);

var compiled = '0x' + fs.readFileSync('bin/Bet.bin');
var peerbet = PeerBet.new({
    from: walletAddress,
    data: compiled,
    gas: 40e5,
    gasPrice: 20e9
}, function (e, contract) {
    if (e) console.log(e);

    if (typeof contract.address !== 'undefined') {
        console.log('Contract mined! address: ' + contract.address +
            ' transaction hash: ' + contract.transactionHash);
        fs.writeFileSync('contract_address', contract.address);
    }
});

Aquí es donde está el problema. La dirección de la billetera encontrada en web3.eth.accounts[0]es una que nunca había visto antes. Tengo dos billeteras en mi sistema (una configurada por Mist y otra por MetaMask), pero ninguna de esas direcciones corresponde a la dirección que obtengo en este script. Como no sé de dónde vino la dirección de la billetera, no sé su clave privada, contraseña, frase de contraseña o lo que sea. Entonces, dos preguntas: ¿de dónde vino esta dirección de billetera y qué debo proporcionar como argumento para comenzar web3.personal.unlockAccount()a trabajar? Gracias.

¿Cuál es el contenido de su directorio D:\SampleDapp\privatenet\keystore? ¿Puedes encontrar allí la dirección de web3.eth.accounts[0]?
@ivicaa Gracias! Bien, en ese directorio hay un archivo JSON con la dirección, ahora sé de dónde obtenemos la dirección. Ahora, ¿cómo encontraría la contraseña (¿frase de contraseña? ¿clave privada?) necesaria para la llamada a web3.personal.unlockAccount()?

Respuestas (1)

Estas dos cuentas deben provenir de su nodo de desarrollo ->D:\SampleDapp\privatenet\keystore

Lo más probable es que los hayas creado en algún momento y ahora ya no puedas recordarlos.

De todos modos, simplemente puede recrear el archivo datadir. Simplemente elimine D:\SampleDapp\privatenety vuelva a llamar al geth --dev ...comando. En la consola crea tantas cuentas como necesites con personal.newAccount(). Luego vuelva a ejecutar su script de prueba de nodejs.

En realidad, parece que cuando inicié el nodo de desarrollo, creó la cuenta automáticamente (no la creé yo, solo las dos cuentas que están en el nodo principal). Usé personal.newAccount()en la consola y creé una nueva cuenta, que ahora aparece como web3.eth.accounts[1]. ¡Gracias por la ayuda!
PD: acabo de darme cuenta de que la cuenta que se crea cuando se inicializa la cadena tiene un saldo de ETH y no tiene una frase de contraseña. Eliminé el privatenetdirectorio, luego ejecuté el comando nuevamente. En la consola tecleé eth.getBalance(eth.accounts[0])y obtuve que la cuenta tiene 1.16e+77 ETH. La llamada personal.unlockAccount(address, "")tiene éxito y permite el uso de la cuenta.