Einfügen in Ethereum mit ReactJS

Ich habe ReactJS, das daran arbeitet, Daten aus meiner Blockchain zu lesen, aber ich kann die Blockchain nicht aktualisieren. Hier ist mein Code zum Lesen der Blockchain, die funktioniert -

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

Wenn ich versuche und zu aktualisieren, schlägt es fehl:

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)

Ich habe diesen Code hinzuzufügen.

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);
}
}

Der Vertrag funktioniert in Trüffel, also weiß ich -

  1. Die Festigkeit ist in Ordnung
  2. Der Zugriff auf die Blockchain ist in Ordnung
  3. Aktualisierung schlägt fehl.

Jede Hilfe ist willkommen.

Führen web3.eth.defaultAccount = web3.eth.coinbaseSie auf Ihrer Client-Konsole aus, während Sie versuchen, eine Funktion aufzurufen, die einen Zustandsschreibvorgang ausführt. Lassen Sie mich das Ergebnis wissen
> web3.eth.defaultAccount = web3.eth.coinbase "0x48884f1f259a4fdbb22b77b56bfd486fe7784304"
Können Sie die Funktion jetzt aufrufen?
Uncaught TypeError: ETHEREUM_CLIENT.eth.coinbase ist keine Funktion, die für defaultAccount gleich ist.

Antworten (1)

Ich habe das endlich hinbekommen. Sie müssen die Funktion kostenpflichtig machen und auch ein Basiskonto definieren.

Also habe ich ReactJS hinzugefügt -

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

und

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

Ich habe bei github nachgesehen und die Methode ist meiner Meinung nach method.js, was relevant ist. Die Solidity-Methode muss zahlbar sein, um den Status in der Blockchain zu ändern, und dort wurde ein Standardkonto für die Gebühren bearbeitet.