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 -
Jede Hilfe ist willkommen.
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.
Aniket
web3.eth.defaultAccount = web3.eth.coinbase
Sie auf Ihrer Client-Konsole aus, während Sie versuchen, eine Funktion aufzurufen, die einen Zustandsschreibvorgang ausführt. Lassen Sie mich das Ergebnis wissenTrevor Lee Oakley
Aniket
Trevor Lee Oakley