let provider_url =
"https://ropsten.infura.io/v3/d5bca90ec3084aee8abd468fdf876a11";
this.web3Provider = new Web3.providers.HttpProvider(provider_url);
window.web3_ = new Web3(this.web3Provider);
let account = "0x25bA673A96acadD7A02f4c5834Ba80C1AF6b7758";
let nonce = window.web3_.toHex(window.web3_.eth.getTransactionCount(account));
let myPrivateKey = "****";
let privateKey = new Buffer(myPrivateKey, "hex");
let functionName = "markAttendance";
let types = ["address", "uint", "uint256"];
let args = [attendeeAddress, opinion, date];
let fullName = functionName + "(" + types.join() + ")";
let signature = CryptoJS.SHA3(fullName, {outputLength: 256}).toString(CryptoJS.enc.Hex).slice(0, 8);
let dataHex = signature + coder.encodeParams(types, args);
let data = "0x" + dataHex;
// let nonce = web3.toHex();
let gasPrice = window.web3_.toHex(20000000000); // 20 Gwei
let gasLimitHex = window.web3_.toHex(4700000);
let rawTx = {
'nonce': nonce,
'gasPrice': gasPrice,
'gasLimit': gasLimitHex,
'from': account,
'to': '0xf77c958bdffee94c3f53eb763cffd646cde336d9',
'data': data,
'value': window.web3_.toHex(window.web3_.toWei("0.5", "ether")),
}
let tx = new Tx(rawTx);
tx.sign(privateKey);
tx.serialize();
console.log(tx.validate());
let serializedTx = '0x' + tx.serialize().toString('hex');
console.log(serializedTx);
window.web3_.eth.sendRawTransaction(serializedTx, function (err, txHash) {
console.log(err, txHash)
})
Vertrag
contract MarkAttendance {
struct AttendeeDetails {
address attendance_giver;
address attendee;
uint attendance_opinion;
uint256 timestamp;
uint256 date_of_attendance;
}
//mapping of structure for storing the attendeeDetails
mapping(uint => AttendeeDetails) public attendeeDetails;
uint public attendeeDetailsCount;
function markAttendance(address _attendee, uint _attendance_opinion, uint256 _date) public {
attendeeDetailsCount ++;
attendeeDetails[attendeeDetailsCount] = AttendeeDetails(msg.sender, _attendee, _attendance_opinion, now, _date);
}
}
Ich erhalte TXHASH, aber die Transaktion wird jedes Mal abgebrochen. Was könnte das Problem sein, das ich mache? kann mir jemand eine Lösung dafür vorschlagen.
Es funktioniert gut, wenn ich die Methode von der Truffle-Konsole aus aufrufe. Ich erhalte eine erfolgreiche Transaktionsquittung.
Ihre Berechnung des Funktionsselektors ist falsch. Du verwendest "uint"
statt "uint256"
. (Ersteres ist ein Alias für letzteres, aber letzteres sollte immer verwendet werden, wenn ein Funktionsselektor berechnet wird.)
Ändern Sie diese Zeile:
let types = ["address", "uint", "uint256"];
dazu:
let types = ["address", "uint256", "uint256"];
BEARBEITEN
Sie hängen auch Ether an die Transaktion an, aber die Funktion, die Sie aufrufen, ist nicht payable
so, dass sie keinen Ether akzeptiert. Um dies zu beheben, löschen Sie die value: ...
Zeile.
payable
Funktion aufrufen.
Benutzer19510
Schamit Verma
Mahesh Rajput
rawTx
ist an:0x7145dc9549f548bef6bb2916e063cc0404d2e8d9
und Ihre eigentliche Vertragsadresse ist0x7145dc9549f548bEF6BB2916e063CC0404d2E8d8
. Es gibt eine geringfügige Änderung im letzten Zeichen9
von8
. verbessere es.Benutzer19510
Mahesh Rajput
Benutzer19510
Sibabrat Schwan
Sibabrat Schwan
Sibabrat Schwan
Herr Y
Mahesh Rajput
0.5 ether
um diese Funktion aufzurufen? das ist nicht nötig, entfernen Sie einfachvalue
einen Teil aus rawTx und versuchen Sie es dann.