Con Truffle 3.0 cuando llamo a una de las funciones de mi contrato, en la consola tengo este error:
Error no capturado (en promesa): dirección no válida
Encontré esta solución, y en mi código lo intento sin éxito.
this.web3Provided.eth.defaultAccount=this.web3Provided.eth.coinbase;
En truffle doc se sentaron, puedo establecer una dirección de origen en mi configuración, pero esto tampoco funciona.from: '0x8c384d9f226ea92c99f7aa83340714a6f82a3161'
También pruebo con esto después de haber importado todo el archivo truffle.config:
TruffleConfig.networks[NODE_ENV].from = this.web3Provided.eth.coinbase;
Por favor, ayúdame.
Gracias al canal Truffle Gitter que descubrí. Tengo que llamar a la función predeterminada en la abstracción de mi contrato de trufa.
MyContract.defaults({from: …})
https://github.com/trufflesuite/truffle/tree/develop/packages/truffle-contract
buildContracts() {
let contracts = {};
let meta;
this.props.contracts.forEach( _contract => {
let {contract_name = ''} = _contract;
meta = contract(_contract);
meta.setProvider(this.web3Provided.currentProvider);
meta.defaults({from: this.web3Provided.eth.coinbase});
contracts[contract_name] = meta;
});
return contracts;
}
Esto funcionó para mí. Espero que mi respuesta ayude a futuros lectores.
Debe configurar la cuenta predeterminada que se utilizará:
web3.eth.defaultAccount = web3.eth.accounts[0];
antes de usar la instancia web3 .
Además, en mi caso en el que estoy usando el cuadro de reacción de trufa , la dirección no válida se puede resolver agregando.
this.state.web3.eth.defaultAccount = this.state.web3.eth.accounts[0];
antes de hacer cualquier cosa relacionada con web3 .
NOTA: No se recomienda encarecidamente cambiar de estado para reaccionar de esta manera. Intente usar
this.setState()
para manipular el elemento secundario del objeto web3. No he pensado mucho en la aplicación que estoy desarrollando, así que si esto funciona, TENGO ORO :D
web3.eth.accounts[0];
parte que no debe definirse estáticamente.Tenía una función de retiro del propietario en mi contrato inteligente que generaría el siguiente error:
Error no capturado (en promesa): dirección no válida
Eventualmente me di cuenta de que Truffle o MetaMask esperan una from
dirección explícita.
Esta fue mi definición de función original:
ownerWithdrawal() {
return this.contractInstance.ownerWithdrawal(); // calls ownerWithdrawal() from Solidity contract
}
Aquí está mi nueva definición de función con from
la dirección especificada.
ownerWithdrawal() {
return this.contractInstance.ownerWithdrawal({from: this.web3accounts[0]});
}
usando una versión antigua de web3 para un tutorial obsoleto web3@0.20.6 y Firefox 100.0.1
esto fue lo que agregué para reaccionar y solucionar el problema
web3.eth.defaultAccount = web3.eth.accounts[0]
Prashant Prabhakar Singh
desvalido
Andrei
contract.default({from: ...})
, solucioné mi problema.