Estoy tratando de implementar un contrato de dos maneras diferentes, no puedo tener éxito en ninguna.
Primera forma:
1. geth console —rinkeby —rpc —rpcapi db,eth,net,web3,personal —unlock="0x..." 2>>geth.log
Tengo ether en mi cuenta, introduzco mi contraseña correctamente, estoy seguro de que la cuenta está en la lista eth.accounts
2. Compilo mi contrato con solc
, me da un código binario y abi, que pongo en variable bin
y abi
. Pongo 0x
antes de código binario.
3. var contract = web3.eth.contract(abi)
4.var token = myContract.new( {from: eth.coinbase, data: bin, gas: 1000000}, function(e, myContract) { if (e) { console.log(e); } else { if (myContract.address) { console.log ("mined " +myCcontract.address); } } })
Y dice que
Error: No se pudo almacenar el código de contrato, verifique su cantidad de gas.
La segunda forma es usando Truffle. Ya he logrado implementar el contrato en rinkeby muchas veces, pero ahora estoy atascado en este error.
1. Ejecuto geth
y desbloqueo la cuenta
2. Hay mi truffle.js
:
módulo.exportaciones = {
redes: {
desarrollo: {
host: "localhost",
puerto: 8545,
network_id: "*", gas: 900000 },
rinkeby: {
host: '127.0.0.1',
puerto: 8545,
network_id: 4 ,
gas: 4612388, // Límite de gas utilizado para despliegues
desde: "0xeb1eb48fc3c2756cde3dce8a53472e437062f976" } } };
3. truffle migrate --reset --network rinkeby
Y dice
Error encontrado, rescate. Estado de la red desconocido. Revise las transacciones exitosas manualmente. TypeError: contract.detectNetwork no es una función en /usr/local/lib/node_modules/truffle/build/cli.bundled.js:201861:21 en /usr/local/lib/node_modules/truffle/build/cli.bundled. js:326484:15 a las
Mi propósito era aprender a interactuar con las funciones del contrato por geth o truffle console. Pero algo salió mal. Por favor ayúdame a arreglarlo.
Si llegaste al final de esta pregunta, desde ya muchas gracias.
intente primero con testrpc: https://github.com/ethereumjs/testrpc .
Y este mensaje de error "Error encontrado, rescate. Estado de la red desconocido" significa que geth no está funcionando correctamente o no está usando el puerto 8545 o no está funcionando debido a la ip 127.0.0.1.
Prueba con testrpc. Vas a tener una gran experiencia. Es más rápido interactuar con contratos con fines de prueba.
Alternativamente, he escrito una pequeña biblioteca para la implementación que puede ser útil para alguien. Se implementa usando ethers.js (el primo estable de web3.js) y es detallado y brillante :)
const etherlime = require('etherlime');
const ICOTokenContract = require('./build/contracts/ICOToken.json');
const randomAddress = '0xda8a06f1c910cab18ad187be1faa2b8606c2ec86';
const defaultConfigs = {
gasPrice: 20000000000,
gasLimit: 4700000
}
const deployer = new etherlime.InfuraPrivateKeyDeployer('Your Privste KEY', 'ropsten', 'Your infura API key', defaultConfigs);
const runICODeployment = async () => {
const contractWrapper = await deployer.deploy(ICOTokenContract);
const transferTransaction = await contractWrapper.contract.transferOwnership(randomAddress);
const result = await contractWrapper.verboseWaitForTransaction(transferTransaction.hash, 'Transfer Ownership');
}
runICODeployment()
Pon esto en un archivo y ejecútalo con node.
Олеся Костеева
Luis Soares