Я знаю, что этот вопрос лучше подходит для обмена стеками Эфириума, но я не получил там никаких ответов, и мне интересно, является ли это проблемой React или чем-то еще.
Я пытаюсь запустить 3 асинхронных метода
1: отправить файл в IPFS:
pushToIPFS = async(e) => {
return new Promise((resolve, reject) => {
ipfs.add(this.state.buffer, (err, ipfsHash) => {
resolve(ipfsHash[0].hash);
})
});
}
2: запись в смарт-контракт и блокчейн:
addToBlockchain = async(_ipfsLink) => {
return new Promise((resolve, reject) => {
const rand = uniqueRandom(1, 10000000)
var key = rand()
let newDate = new Date()
newDate = newDate.getTime()
var _account = this.state.account[0]
var _uid = this.state.uid
storehash.methods.sendDocument(_ipfsLink, newDate, key, _uid).send({from: _account})
resolve(key)
})
}
3: добавить запись в базу данных firebase:
createStudent = async(_key) => {
//get student details from state variables & current user uid
var _uid = this.state.uid
var _studentName = this.state.StudentName
var _studentNumber = this.state.StudentNumber
var _courseCode = this.state.CourseCode
var _courseName = this.state.CourseName
var _idForBlockchain = _key
// database.ref.students.uid.studentNumber
const db = firebase.database()
db.ref().child("students").child(_uid).child(_studentNumber).set(
{ studentName: _studentName,
courseCode: _courseCode,
courseName: _courseName,
blockchainKey: _idForBlockchain
}
);
alert("Student added")
}
Они вызываются в указанном порядке этой функцией:
AddMyStuff = async (e) => {
e.preventDefault()
const ipfsHash = await this.pushToIPFS()
//await this.createStudent()
const _key = await this.addToBlockchain(ipfsHash)
await this.createStudent(_key)
}
Проблема в том, что учащийся добавляется в базу данных до подтверждения транзакции метамаски (умного контракта). А также после выполнения смарт-контракта все правильные данные записываются в блокчейн, но в консоли появляется следующая ошибка:
web3-core-method.umd.js: 1191 Uncaught (в обещании) Ошибка: транзакция была отменена EVM: {"transactionHash":
"0xe3f411d872bb5f42bd7bd15676647f5056421c5accb5aa6fa22d75eadd09973a",
"actionIndex ": 0," blockHash ":
"0x749ccd76a6888b261b00d8851dca36545fde563fce4c8513407a180d6cac3a00",
"blockNumber": 6, "from":
"0xa5fcbc63d6bcb8e07750cb75073ec3ff7b98c4f5", "to":
"0xadb13cc1a32b64f938be7c1d3447dfcd20c09ae9", "gasUsed": 175983,
"cumulativeGasUsed": 175983, "contractAddress": null, "logs": [],
"status": true, "logsBloom":
"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"v": "0x2d46", "r":
"0xa1dfe4e9a4ac8dbbdf49186741cd74bda4fed78b280458ed2cd7f979a3020ccd",
"S":
"0x477fa20a2176975f3db9fb1e375fceeedb6ae0e7be35177d4908ad1744dddd1a"}
на SafeSubscriber._next (web3-core-method.umd.js: 1191)
на SafeSubscriber .__ tryOrUnsub (Subscriber.js: 245)
на SafeSubscriber.next (Subscriber.js: 174)
на Subscriber._next (Subscriber.js: 99)
на Subscriber.next (Subscriber.js: 68)
в TransactionObserver.emitNext (web3-core-method.umd.js: 510)
в _callee $ (web3-core-method.umd.js: 357)
в tryCatch (runtime.js: 63)
в Generator.invoke [как _invoke] (runtime.js: 282)
в Generator.prototype. (анонимная функция) [как далее] (http://localhost:3000/static/js/0.chunk.js:276708:21)
at asyncGeneratorStep (asyncToGenerator.js: 3)
в _next (asyncToGenerator.js: 25)
Действительно страшные вещи, кто-нибудь знает, что может быть причиной этого? Снова извините, если это лучше подходит для обмена стеками Эфириума, но я не получил ответов и не знаю, что еще попробовать. Заранее спасибо за любую помощь!