Trufa dirección inválida

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.

Respuestas (4)

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;
  }
¿Puede publicar una respuesta elaborada, como dónde ha agregado la línea? También recibo el mismo error al llamar a la función de un contrato usando web3. Estoy usando testrpc. El contrato se implementó a través de la trufa.
Esta es mi función de contrato de compilación, una función simple que repite mi lista de contratos. Para cada contrato tuve que establecer un valor predeterminado con una base de monedas. buildContracts() { let contratos = {}; dejar meta; this.props.contracts.forEach( _contrato => { let {contrato_nombre = ''} = _contrato; meta = contrato(_contrato); meta.setProvider(this.web3Provided.currentProvider); meta.defaults({from: this.web3Provided .eth.coinbase}); contratos[nombre_del_contrato] = meta; }); contratos de devolución; }
Muchas gracias, agregando contract.default({from: ...}), solucioné mi problema.

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

¿Podría dar más detalles sobre esto, por favor? ¿Por qué la trufa no hace esto por defecto?
No estoy seguro de por qué truffle no hace esto de forma predeterminada, pero supongo que es una 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 fromdirecció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 fromla 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]