Интеллектуальная контрактная транзакция отменена EVM - PullRequest
0 голосов
/ 30 марта 2019

Я знаю, что этот вопрос лучше подходит для обмена стеками Эфириума, но я не получил там никаких ответов, и мне интересно, является ли это проблемой 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)

Действительно страшные вещи, кто-нибудь знает, что может быть причиной этого? Снова извините, если это лучше подходит для обмена стеками Эфириума, но я не получил ответов и не знаю, что еще попробовать. Заранее спасибо за любую помощь!

1 Ответ

0 голосов
/ 30 марта 2019

в случае, если sendDocument обещание, вы можете попробовать это ..

  addToBlockchain = async (_ipfsLink) => {

    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

    await storehash.methods.sendDocument(_ipfsLink, newDate, key, _uid).send({from: _account}) 

    return key
}
...