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 %APPDATA
directorio (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.
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\privatenet
y 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.
personal.newAccount()
en la consola y creé una nueva cuenta, que ahora aparece como web3.eth.accounts[1]. ¡Gracias por la ayuda!privatenet
directorio, 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.
ivicaa
web3.eth.accounts[0]
?Juan Riehl
web3.personal.unlockAccount()
?