Insertar en Ethereum con ReactJS

Tengo ReactJS trabajando para leer datos de mi cadena de bloques pero no puedo actualizar la cadena de bloques. Aquí está mi código para leer la cadena de bloques que funciona:

  var reviewContract = ETHEREUM_CLIENT.eth.contract(reviewContractABI).at(reviewContractAddress)
  var reviewData = reviewContract.getReviews()

Cuando intento actualizar falla:

reviewContract.addReview("company1", "trevor lee oakley", 1)


Uncaught Error: invalid address
at inputAddressFormatter (http://localhost:3000/static/js/bundle.js:45751:12)
at inputTransactionFormatter (http://localhost:3000/static/js/bundle.js:45577:21)
at http://localhost:3000/static/js/bundle.js:45881:29
at Array.map (native)
at Method.formatInput (http://localhost:3000/static/js/bundle.js:45880:33)
at Method.toPayload (http://localhost:3000/static/js/bundle.js:45906:24)
at Eth.send [as sendTransaction] (http://localhost:3000/static/js/bundle.js:45931:31)
at SolidityFunction.sendTransaction (http://localhost:3000/static/js/bundle.js:48458:27)
at SolidityFunction.execute (http://localhost:3000/static/js/bundle.js:48544:38)
at App.componentWillMount (http://localhost:3000/static/js/bundle.js:32663:23)

Tengo este código para agregar.

pragma solidity ^0.4.8;
contract Review {

Review[] public reviews;
struct Review {
    bytes32 companyName;
    bytes32 companyReviewer;
    uint companyReview;
}

function addReview (bytes32 _companyName, bytes32 _companyReviewer, uint _companyReview) returns (bool success) {
    Review memory newReview;
    newReview.companyName = _companyName;
    newReview.companyReviewer = _companyReviewer;
    newReview.companyReview = _companyReview;

    reviews.push(newReview);
    return true;
}

function getReviews() constant returns (bytes32[], bytes32[], uint[]) {

    uint length = reviews.length;
    bytes32[] memory companyNames = new bytes32[](length);
    bytes32[] memory companyReviewers = new bytes32[](length);
    uint[] memory companyReviews = new uint[](length);

    for (uint i=0; i<reviews.length; i++) {
        Review memory currentReview;
        currentReview = reviews[i];

        companyNames[i]=currentReview.companyName;
        companyReviewers[i]=currentReview.companyReviewer;
        companyReviews[i]=currentReview.companyReview;

    }
    return (companyNames, companyReviewers, companyReviews);
}
}

El contrato funciona en trufa, así que sé -

  1. La solidez está bien
  2. El acceso a la cadena de bloques está bien
  3. La actualización falla.

Cualquier ayuda es bienvenida.

Ejecute web3.eth.defaultAccount = web3.eth.coinbaseen la consola de su cliente mientras intenta llamar a una función que realiza una operación de escritura de estado. Déjame saber el resultado
> web3.eth.cuentapredeterminada = web3.eth.coinbase "0x48884f1f259a4fdbb22b77b56bfd486fe7784304"
Ahora, ¿puedes llamar a la función?
TypeError no detectado: ETHEREUM_CLIENT.eth.coinbase no es una función igual para la cuenta predeterminada.

Respuestas (1)

Finalmente resolví esto. Debe hacer que la función sea pagadera y también definir una cuenta base.

Así que agregué en ReactJS -

ETHEREUM_CLIENT.eth.defaultAccount = ETHEREUM_CLIENT.eth.coinbase;

y

  function addReview (bytes32 _companyName, bytes32 _companyReviewer, uint _companyReview) payable returns (bool success) {

Revisé en github y creo que el método es method.js, que es relevante. El método de solidez debe ser pagadero para cambiar el estado en la cadena de bloques y allí funcionó una cuenta predeterminada para los cargos.