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)
})
Договор
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);
}
}
Я получаю TXHASH, но транзакция каждый раз отменяется. в чем может быть проблема, которую я делаю? может ли кто-нибудь предложить мне какое-либо решение для этого.
Он отлично работает, если я вызываю метод из консоли трюфеля. Я получаю квитанцию об успешной транзакции.
Ваш расчет селектора функций неверен. Вы используете "uint"
вместо "uint256"
. (Первый является псевдонимом для второго, но последний всегда следует использовать при вычислении селектора функций.)
Измените эту строку:
let types = ["address", "uint", "uint256"];
к этому:
let types = ["address", "uint256", "uint256"];
РЕДАКТИРОВАТЬ
Вы также присоединяете эфир к транзакции, но функция, которую вы вызываете, не payable
принимает эфир. Чтобы это исправить, сбросьте value: ...
строку.
payable
функции.
пользователь19510
Шамит Верма
Махеш Раджпут
rawTx
адресу:0x7145dc9549f548bef6bb2916e063cc0404d2e8d9
и ваш фактический договорной адрес —0x7145dc9549f548bEF6BB2916e063CC0404d2E8d8
. есть небольшое изменение в последнем символе9
по сравнению с8
. исправь это.пользователь19510
Махеш Раджпут
пользователь19510
Сибабрат Суэйн
Сибабрат Суэйн
Сибабрат Суэйн
Мистер Ю.
Махеш Раджпут
0.5 ether
вызов этой функции? не нужно, просто удалитеvalue
часть из rawTx, а затем попробуйте.